You need to enable JavaScript to run this app. Postman中如何校验接口返回数组是否包含指定对象(原有写法失效)
优惠活动
大模型
产品
解决方案
定价
更多

Postman中如何校验接口返回数组是否包含指定对象(原有写法失效)

Postman校验对象数组是否包含指定对象的实现方案

之前脚本不生效的核心原因

你写的pm.expect(jsonData).to.include(myObject)没法正常校验,本质是漏了深度比对修饰符。Postman底层用的Chai断言库中,include默认做引用层级的严格比对:碰到数组里的对象元素时,只会判断两个对象是不是同一个内存引用,根本不会逐字段匹配内部的键值对。哪怕两个对象的键、值看起来完全一模一样,只要不是同一个内存实例,断言就会直接判定不匹配。

可直接复用的修正脚本

场景1:要求数组内的对象和目标对象完全匹配(无多余字段)

只要在原有断言语句里加上deep修饰符,开启逐键值深度比对就能正常校验,完整脚本如下:

// 解析接口返回的JSON响应
const jsonData = pm.response.json();
// 定义需要校验存在的目标对象
const targetObject = {
    id: 3,
    name: "project three"
};

pm.test('响应数组中存在指定对象', () => {
    // 加上deep修饰符,实现对象字段的逐行深度匹配
    pm.expect(jsonData).to.deep.include(targetObject);
});

场景2:只校验指定键值,允许对象存在其他额外字段

如果接口返回的对象附带了其他不需要校验的字段(比如创建时间、操作人、状态码等),上面的完全匹配逻辑会校验失败,这时可以通过数组遍历实现部分匹配判断:

const jsonData = pm.response.json();
const targetObject = {
    id: 3,
    name: "project three"
};

pm.test('响应数组中存在带指定键值的对象', () => {
    // 遍历整个数组,只要存在一个元素匹配目标的所有指定键值就算通过
    const isMatchExist = jsonData.some(item => {
        // 逐字段校验目标要求的属性是否和数组元素一致
        return Object.keys(targetObject).every(key => {
            return item[key] === targetObject[key];
        });
    });
    // 匹配失败时抛出明确提示,方便排查问题
    pm.expect(isMatchExist, "未在响应数组中找到带指定键值的对象").to.be.true;
});

内容的提问来源于stack exchange,提问作者Volodumr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 09:45:00