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

Postman监控模式执行GET请求报错:TypeError读取undefined的id属性

Postman Monitor 中出现 TypeError: Cannot read properties of undefined (reading 'id') 的原因及解决方法

问题背景

同一个GET请求在Postman本地单独执行、通过Runner执行时均无报错,但在Monitor模式下执行时,始终抛出TypeError: Cannot read properties of undefined (reading 'id')错误,报错触发于读取响应中的id值环节。

接口响应示例

[
 {
        "id": "13",
        "description": "Visitor1"
    },
    {
        "id": "14",
        "description": "Visitor2"
    },
    {
        "id": "15",
        "description": "Visitor3"
    },
    {
        "id": "16",
        "description": "Visitor4"
    }
]

原Test脚本

if (responseCode.code == 200) {
    let jsonData = pm.response.json();
    console.log(jsonData);
    let Id = JSON.parse(jsonData[1].id);
    console.log(JSON.parse(Id));
    pm.environment.set('Test_Id', Id);
    pm.environment.set('Test_Description', jsonData[1].description);
}

原因分析

  • Monitor运行环境的差异:Monitor运行在Postman云端服务器,与本地/Runner的执行环境(如地理位置、后端访问环境)可能不同,导致接口返回的数组元素数量不足2个(比如空数组或仅1个元素),此时jsonData[1]为undefined,读取其id属性必然触发报错。
  • 脚本缺少边界校验:代码直接假设响应数组至少包含2个元素,未做前置判断,一旦数组长度不符合预期就会引发错误。
  • 冗余的JSON.parse操作:jsonData[1].id本身就是字符串类型,无需额外解析,这步操作不仅多余,还可能在特殊场景下引发额外异常。

解决方法

  1. 添加数组边界检查:在访问jsonData[1]前,先确认数组存在且长度达标。
  2. 移除冗余解析操作:直接使用响应中的id字符串即可。

修改后的Test脚本

if (responseCode.code == 200) {
    let jsonData = pm.response.json();
    console.log(jsonData);
    
    // 校验数组有效性及长度
    if (Array.isArray(jsonData) && jsonData.length > 1) {
        const Id = jsonData[1].id;
        console.log(Id);
        pm.environment.set('Test_Id', Id);
        pm.environment.set('Test_Description', jsonData[1].description);
    } else {
        console.error('响应数组元素数量不足,无法获取目标数据');
        // 可选:添加测试断言,明确标记测试失败
        pm.test('响应数据符合预期', () => {
            pm.expect(jsonData.length).to.be.above(1);
        });
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:42:12