Postman无法给函数累加失败计数且无法停止请求执行怎么办
核心问题排查
- 测试脚本逻辑错误:每次执行测试脚本时都先将
failures集合变量重置为空数组,导致之前的失败记录被清空,无法正确累加失败次数;且仅用pm.test断言,断言失败时不会执行后续累加逻辑,无法统计非200状态码的情况。 - 执行流控制逻辑问题:
postman.setNextRequest(null)仅在集合Runner批量运行时生效,单独执行单个请求不会触发该逻辑;另外如果你的指定新请求是集合内的请求,用pm.sendRequest只是异步发送单次请求,不会控制集合的后续执行顺序,需要按需调整。
修复后代码
1. 集合级前置脚本(建议把变量初始化放到这里,不要放在单个请求里,仅执行一次)
// 初始化失败计数数组,仅第一次运行时设置 if (!pm.collectionVariables.has("failures")) { pm.collectionVariables.set("failures", []); }
2. 接口测试脚本(替换你原来的测试脚本)
let failures = pm.collectionVariables.get("failures"); // 先判断响应状态码,非200就累加失败计数 if (pm.response.code !== 200) { failures.push(pm.response.code); pm.collectionVariables.set("failures", failures); } // 原有状态断言保留 pm.test("Status test", function () { pm.response.to.have.status(200); });
3. 后续请求的前置脚本(替换你原来的前置脚本)
let failures = pm.collectionVariables.get("failures"); console.log(failures); if (failures.length > 0) { console.log('failures found'); // 如果要执行集合内名为"New Request"的请求,用setNextRequest控制执行流 postman.setNextRequest("New Request"); // 如果只是要异步发送请求不调整执行流,再保留pm.sendRequest逻辑 // pm.sendRequest("New Request", function (err, res) { // console.log(res); // }); } else { console.log('NO failures'); // 停止后续所有请求,仅集合Runner运行时生效 postman.setNextRequest(null); return null; }
运行注意事项
- 必须通过Postman的集合Runner批量运行整个请求流,
setNextRequest的控制逻辑才会生效,单独执行单个请求无法停止后续请求。 - 如果需要多次运行测试,每次运行前可以手动清空
failures集合变量,或者在集合级前置脚本里加每次运行前重置的逻辑。
内容的提问来源于stack exchange,提问作者William Zebrowski
相关产品推荐
相关产品推荐

