在Postman中验证响应数组中唯一符合指定条件的对象
接口响应体验证问题及修复方案
需求说明
需要验证接口返回的对象数组中,存在且仅存在一个满足以下两个条件的对象:
isPrimary值为truesalePerson值为"Chuck Norris"
接口响应体示例:
[ { "districtName": "Austria", "storeName": "Store6", "salePerson": "sdfgh", "isPrimary": false }, { "districtName": "Austria", "storeName": "Store6", "salePerson": "dfsd", "isPrimary": false }, { "districtName": "Austria", "storeName": "Store6", "salePerson": "Chuck Norris", "isPrimary": true }, { "districtName": "Austria", "storeName": "Store6", "salePerson": "sdfgh", "isPrimary": false }]
原脚本及错误信息
原脚本:
data =pm.response.body; let object_to_find = { saleperson: 'Chuck Norris' }; let result2 = data.filter(function (value) { return value.id == object_to_find.id && value.name == object_to_find.name; }); console.log(result2);
错误信息:
Couldn't evaluate the test script: TypeError: Cannot read properties of undefined (reading 'filter')
错误原因分析
- 响应体未解析:
pm.response.body返回的是原始字符串,不是JavaScript数组,因此无法直接调用filter方法 - 过滤条件完全错误:
- 变量名大小写错误:
saleperson应为salePerson(接口响应中是驼峰命名) - 判断逻辑错误:实际需要匹配的是
salePerson和isPrimary属性,而非id和name
- 变量名大小写错误:
修复后的验证脚本
// 将响应体解析为JavaScript数组 const data = pm.response.json(); // 过滤出符合条件的对象 const matchedItems = data.filter(item => { return item.salePerson === 'Chuck Norris' && item.isPrimary === true; }); // 验证:存在且仅存在一个符合条件的对象 pm.test("存在且仅存在一个Chuck Norris的主销售记录", function () { pm.expect(matchedItems.length).to.equal(1); }); // 控制台输出匹配结果,方便调试 console.log("匹配到的记录:", matchedItems);
脚本说明
- 使用
pm.response.json()自动解析JSON格式的响应体为JS数组,解决filter调用报错问题 - 过滤条件直接匹配需求中的两个属性,确保逻辑正确
- 添加
pm.test断言,正式验证结果数量,符合接口测试的规范 - 保留控制台输出,便于调试过程中查看匹配结果
内容的提问来源于stack exchange,提问作者Doraemon
相关产品推荐
相关产品推荐

