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本身就是字符串类型,无需额外解析,这步操作不仅多余,还可能在特殊场景下引发额外异常。
解决方法
- 添加数组边界检查:在访问
jsonData[1]前,先确认数组存在且长度达标。 - 移除冗余解析操作:直接使用响应中的
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
相关产品推荐
相关产品推荐

