Postman集合运行正常但Newman执行时部分测试失败
问题现象
在Postman客户端运行整个测试集合时,全部测试用例无报错,但使用Newman执行同一集合时,有2个请求下的测试用例执行失败。
附:现有测试脚本与Postman中正常返回的响应片段
Calculate接口测试脚本
testsuite = "T5 - FeederConfigurator - Unit - Calculate - " var jsonData = JSON.parse(responseBody); pm.test(testsuite + "Status code is 200", function () {pm.response.to.have.status(200);}); pm.test(testsuite + "Succes (true)", function() {pm.expect(jsonData.success).to.eql(true); }); pm.test(testsuite + "No Errors", function() {pm.expect(jsonData.error).to.eql(null); }); pm.test(testsuite + "FishPerHa", function() {pm.expect(jsonData.result.ufsrFishPerHa).to.eql(0)}); pm.test(testsuite + "FeederCountRecommended", function() {pm.expect(jsonData.result.ufsrFeederCountRecommended).to.eql(1)}); pm.test(testsuite + "TimeRangeStart_1", function() {pm.expect(jsonData.result.ufsrTimeRangeResults[0].utrStartTime).to.eql('00:00')});
Postman中该接口正常响应片段:
{ "result": { "ufsrTotalNumberOfFish": 25000, "ufsrSurvivalPercentage": 100.0, "ufsrFishPerHa": 0, "ufsrBiomass": 1.25659535973556, "ufsrBiomassPercentageFed": 0.0045201895240963965, "ufsrFeedAmount": 5.68004918110482, "ufsrFeederCount": 11, "ufsrFeederCountRecommended": 1, "ufsrFeederTimeGap": 11, "ufsrTimeRangeResults": [ { "utrTimeRangeNr": 1, "utrStartTime": "00:00", "utrStopTime": "00:00",
Calculate by Id接口测试脚本
testsuite = "T5 - FeederConfigurator - Unit - Calculate by Id - " var jsonData = JSON.parse(responseBody); pm.test(testsuite + "Status code is 200", function () {pm.response.to.have.status(200);}); pm.test(testsuite + "Succes (true)", function() {pm.expect(jsonData.success).to.eql(true); }); pm.test(testsuite + "No Errors", function() {pm.expect(jsonData.error).to.eql(null); }); pm.test(testsuite + "FishPerHa", function() {pm.expect(jsonData.result.ufsrFishPerHa).to.eql(0)}); pm.test(testsuite + "FeederCountRecommended", function() {pm.expect(jsonData.result.ufsrFeederCountRecommended).to.eql(1)}); pm.test(testsuite + "TimeRangeStart_1", function() {pm.expect(jsonData.result.ufsrTimeRangeResults[0].utrStartTime).to.eql('00:00')});
Postman中该接口正常响应片段:
{ "result": { "ufsrTotalNumberOfFish": 25000, "ufsrSurvivalPercentage": 100.0, "ufsrFishPerHa": 0, "ufsrBiomass": 1.25659535973556, "ufsrBiomassPercentageFed": 0.0045201895240963965, "ufsrFeedAmount": 5.68004918110482, "ufsrFeederCount": 11, "ufsrFeederCountRecommended": 1, "ufsrFeederTimeGap": 11, "ufsrTimeRangeResults": [ { "utrTimeRangeNr": 1, "utrStartTime": "00:00", "utrStopTime": "00:00",
Newman执行报错信息
01. AssertionError T5 - FeederConfigurator - Unit - Calculate - Succes (true) expected false to deeply equal true at assertion:1 in test-script inside "T5 - FeederConfigurator / Unit / Unit/Calculate" 02. AssertionError T5 - FeederConfigurator - Unit - Calculate - No Errors expected { Object (code, message, ...) } to deeply equal null at assertion:2 in test-script inside "T5 - FeederConfigurator / Unit / Unit/Calculate" 03. TypeError T5 - FeederConfigurator - Unit - Calculate - FishPerHa Cannot read properties of null (reading 'ufsrFishPerHa') at assertion:3 in test-script inside "T5 - FeederConfigurator / Unit / Unit/Calculate" 04. TypeError T5 - FeederConfigurator - Unit - Calculate - FeederCountRecommended Cannot read properties of null (reading 'ufsrFeederCountRecommended') at assertion:4 in test-script inside "T5 - FeederConfigurator / Unit / Unit/Calculate" 05. TypeError T5 - FeederConfigurator - Unit - Calculate - TimeRangeStart_1 Cannot read properties of null (reading 'ufsrTimeRangeResults') at assertion:5 in test-script inside "T5 - FeederConfigurator / Unit / Unit/Calculate" 06. AssertionError T5 - FeederConfigurator - Unit - Calculate by Id - Succes (true) expected false to deeply equal true at assertion:1 in test-script inside "T5 - FeederConfigurator / Unit / Unit/Id/Calculate" 07. AssertionError T5 - FeederConfigurator - Unit - Calculate by Id - No Errors expected { Object (code, message, ...) } to deeply equal null at assertion:2 in test-script inside "T5 - FeederConfigurator / Unit / Unit/Id/Calculate" 08. TypeError T5 - FeederConfigurator - Unit - Calculate by Id - FishPerHa Cannot read properties of null (reading 'ufsrFishPerHa') at assertion:3 in test-script inside "T5 - FeederConfigurator / Unit / Unit/Id/Calculate" 09. TypeError T5 - FeederConfigurator - Unit - Calculate by Id - FeederCountRecommended Cannot read properties of null (reading 'ufsrFeederCountRecommended') at assertion:4 in test-script inside "T5 - FeederConfigurator / Unit / Unit/Id/Calculate" 10. TypeError T5 - FeederConfigurator - Unit - Calculate by Id - TimeRangeStart_1 Cannot read properties of null (reading 'ufsrTimeRangeResults') at assertion:5 in test-script inside "T5 - FeederConfigurator / Unit / Unit/Id/Calculate"
原因分析
所有报错的根源是:两个计算接口在Newman环境下实际返回的是业务错误响应——success字段为false、error是包含错误码和错误信息的对象、result字段为null,和Postman客户端里拿到的正常响应完全不一致。后续读取result下属性抛出的类型错误,都是接口返回异常后的连带问题,不是测试脚本本身的语法写错了。
常见触发这类Postman和Newman执行结果不一致的原因有4种:
- 变量/鉴权传递失效:Postman客户端本地可能存了手动设置的临时变量、或者缓存了前序请求的Cookie/Token,Newman执行时没有正确加载这些值,比如鉴权凭证过期、必填的业务参数为空,触发后端返回业务错误。
- 请求头配置不一致:Postman客户端会自动注入部分默认请求头(比如User-Agent、Referer、特定的Content-Type值),Newman默认发送的请求头和客户端存在差异,被后端的校验规则拦截。
- 执行顺序/依赖问题:Newman执行集合时如果没有正确匹配请求的执行顺序、或者前置请求执行失败没有阻断流程,会导致当前计算接口拿到的依赖前置数据不符合要求,触发计算逻辑报错。
- 版本兼容问题:本地安装的Newman版本和Postman客户端内置的Postman Runtime版本差距过大,部分变量解析、脚本执行逻辑存在兼容偏差。
解决步骤
- 先拿到接口真实报错信息
在两个失败请求的测试脚本最开头加打印逻辑,执行Newman时就能看到接口返回的具体错误码和提示,直接定位后端拦截的原因:
console.log("请求完整地址:", pm.request.url.toString()) console.log("请求发送参数:", pm.request.body?.raw || pm.request.body?.formdata?.toString()) console.log("接口返回完整内容:", responseBody)
- 排查变量和鉴权问题
逐一核对两个接口依赖的所有环境变量、集合变量、全局变量,确认Newman执行时通过-e参数传入的环境配置文件,包含所有Postman客户端里用到的参数值,没有遗漏手动临时设置的内容;如果接口需要登录鉴权,确认前序登录请求在Newman中正常执行,生成的Token/Cookie能正确传递到后续请求。 - 对齐请求配置
对比Postman客户端中两个请求的完整请求头列表,把后端校验依赖的头字段(比如固定的Content-Type、自定义业务头、User-Agent等)手动配置到请求的Header中,不要依赖Postman客户端自动注入。 - 给测试脚本增加容错
在读取result字段下的属性前,先判断result是否存在,避免接口异常时直接抛出类型错误,方便排查问题,以Calculate接口为例,修改后的脚本如下:
testsuite = "T5 - FeederConfigurator - Unit - Calculate - " var jsonData = JSON.parse(responseBody); pm.test(testsuite + "Status code is 200", function () {pm.response.to.have.status(200);}); pm.test(testsuite + "Succes (true)", function() {pm.expect(jsonData.success).to.eql(true); }); pm.test(testsuite + "No Errors", function() {pm.expect(jsonData.error).to.eql(null); }); if (jsonData.result) { pm.test(testsuite + "FishPerHa", function() {pm.expect(jsonData.result.ufsrFishPerHa).to.eql(0)}); pm.test(testsuite + "FeederCountRecommended", function() {pm.expect(jsonData.result.ufsrFeederCountRecommended).to.eql(1)}); pm.test(testsuite + "TimeRangeStart_1", function() {pm.expect(jsonData.result.ufsrTimeRangeResults[0].utrStartTime).to.eql('00:00')}); } else { console.log("接口返回业务错误,错误详情:", jsonData.error) }
- 对齐版本
将本地Newman升级到最新版本,保证和Postman客户端的Runtime版本兼容,升级命令:npm install -g newman@latest
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

