Postman测试响应JSON字段数据类型报expected undefined to be a number错误解决
错误原因
出现AssertionError: expected undefined to be a number报错,核心原因是你从响应JSON里读取的passagiersnummer字段不存在,读取结果为undefined,而非字段类型不匹配。常见的触发场景有3种:
- 实际返回的响应结构和你给出的示例不一致,
passagiersnummer字段嵌套在其他父级字段下(比如常见的data、result业务字段层),直接从根路径读取自然为空 - 响应头的
Content-Type不是application/json,导致pm.response.json()解析异常,拿到的不是预期的JSON对象 - 字段拼写有误,JavaScript对大小写、特殊字符敏感,只要和实际返回的字段名有一点差异就会读取失败
修复步骤
- 先加调试代码确认实际响应结构,把下面的脚本替换你原来的测试脚本,运行后在Postman控制台查看打印的解析结果,确认字段路径和拼写:
pm.test("Test data type of the response", function () { // 先校验响应为合法JSON格式,避免解析报错 pm.response.to.be.json; const jsonData = pm.response.json(); // 打印解析结果,确认字段路径 console.log('解析后的响应内容:', jsonData); // 先校验字段存在,再校验类型 pm.expect(jsonData).to.have.property('passagiersnummer'); // 如果你需要严格校验为整数(而非浮点数)可以用这个写法,不需要的话保留to.be.a("number")即可 pm.expect(jsonData.passagiersnummer).to.be.a('number').and.satisfy(Number.isInteger); pm.expect(jsonData).to.have.property('naam').that.is.a('string'); });
- 如果控制台打印的结果显示
passagiersnummer是嵌套字段,比如在data层下,就把取值路径修改为对应层级即可,示例:
// 示例:字段嵌套在data下的写法 pm.expect(jsonData.data.passagiersnummer).to.be.a('number');
内容的提问来源于stack exchange,提问作者klaasvanburen10
相关产品推荐
相关产品推荐

