You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Postman中验证响应数组中唯一符合指定条件的对象

接口响应体验证问题及修复方案

需求说明

需要验证接口返回的对象数组中,存在且仅存在一个满足以下两个条件的对象:

  • isPrimary 值为 true
  • salePerson 值为 "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')

错误原因分析

  1. 响应体未解析:pm.response.body 返回的是原始字符串,不是JavaScript数组,因此无法直接调用filter方法
  2. 过滤条件完全错误:
    • 变量名大小写错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 02:12:43