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

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版本差距过大,部分变量解析、脚本执行逻辑存在兼容偏差。
解决步骤
  1. 先拿到接口真实报错信息
    在两个失败请求的测试脚本最开头加打印逻辑,执行Newman时就能看到接口返回的具体错误码和提示,直接定位后端拦截的原因:
console.log("请求完整地址:", pm.request.url.toString())
console.log("请求发送参数:", pm.request.body?.raw || pm.request.body?.formdata?.toString())
console.log("接口返回完整内容:", responseBody)
  1. 排查变量和鉴权问题
    逐一核对两个接口依赖的所有环境变量、集合变量、全局变量,确认Newman执行时通过-e参数传入的环境配置文件,包含所有Postman客户端里用到的参数值,没有遗漏手动临时设置的内容;如果接口需要登录鉴权,确认前序登录请求在Newman中正常执行,生成的Token/Cookie能正确传递到后续请求。
  2. 对齐请求配置
    对比Postman客户端中两个请求的完整请求头列表,把后端校验依赖的头字段(比如固定的Content-Type、自定义业务头、User-Agent等)手动配置到请求的Header中,不要依赖Postman客户端自动注入。
  3. 给测试脚本增加容错
    在读取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)
}
  1. 对齐版本
    将本地Newman升级到最新版本,保证和Postman客户端的Runtime版本兼容,升级命令:
    npm install -g newman@latest

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:15:54