在Postman中测试对比不同JSON响应数组中的数值
问题需求
我通过Postman的两个不同GET接口获取了两份JSON响应数据,分别为specificYield和expectedYield,二者均为嵌套数组结构,每个子数组包含时间戳和数值。
响应数据示例
specificYield响应数据:
[ [ "2020-11-30T00:00:00Z", 50.701604514154944 ], [ "2020-12-31T00:00:00Z", 19.328539610238128 ], [ "2021-01-31T00:00:00Z", 25.183636870929693 ] ]
expectedYield响应数据:
[ [ "2020-11-30T00:00:00Z", 62.78336503569246 ], [ "2020-12-31T00:00:00Z", 32.97678871921154 ], [ "2021-01-31T00:00:00Z", 40.82916109964013 ] ]
当前脚本问题
需要编写Postman测试脚本,验证expectedYield中的每个数值始终大于specificYield中对应位置的数值。现有初步脚本因原逻辑基于对象处理,需重构以适配数组结构,当前脚本如下:
pm.test("Expected Yield > Specified Yield", function () { const expectedYield = pm.response.json(); const specificYield = pm.globals.get("specificYield"); Object.values(expectedYield).forEach((record) => { pm.expect(record[0][1]).to.greaterThan( Object.values(specificYield).forEach((record) => { pm.expect(record[0][1]); }) ); }); });
重构后的正确脚本
针对数组结构,直接按索引遍历两个数组即可完成验证,同时补充必要的校验逻辑:
pm.test("Expected Yield 始终大于 Specific Yield", function () { // 解析当前响应的 expectedYield 数组 const expectedYield = pm.response.json(); // 解析全局变量中的 specificYield(全局变量存的是字符串,需转成JSON数组) const specificYield = JSON.parse(pm.globals.get("specificYield")); // 先校验两个数组长度一致,避免索引越界 pm.expect(expectedYield.length).to.equal(specificYield.length, "两个数组长度不匹配,无法一一对应对比"); // 遍历数组,按索引对比对应位置的数据 expectedYield.forEach((expectedItem, index) => { const specificItem = specificYield[index]; // 可选:验证时间戳一致,确保对比的是同一时间点的数据 pm.expect(expectedItem[0]).to.equal(specificItem[0], `时间戳不匹配:expected为${expectedItem[0]},specific为${specificItem[0]}`); // 核心验证:expected数值大于specific数值 pm.expect(expectedItem[1]).to.be.greaterThan(specificItem[1], `${expectedItem[0]}时间点:Expected Yield(${expectedItem[1]}) 不大于 Specific Yield(${specificItem[1]})`); }); });
脚本关键说明
- 数据解析处理:从全局变量获取的
specificYield是字符串格式,必须用JSON.parse()转换为数组才能遍历操作 - 长度校验:先确认两个数组长度一致,避免出现数据错位或索引越界问题
- 时间戳验证:可选步骤,确保对比的是同一时间维度的数据,避免因数据顺序错误导致无效验证
- 精准报错:每个断言都添加了自定义错误信息,方便快速定位不符合要求的数据点
内容的提问来源于stack exchange,提问作者B Ahern
相关产品推荐
相关产品推荐

