postman.setNextRequest() 仅在 Collection Runner、Newman 或 Monitor 中生效,单个请求发送时静默忽略;需先校验 pm.response.code 再解析 JSON,用 postman.setNextRequest("null") 可安全终止流程。

直接结论:用 postman.setNextRequest() 配合 pm.response.json() 或 pm.response.code 做判断,就能根据返回状态跳转请求——但必须在 Collection Runner 或 Newman 中运行才生效,单个请求发送时完全不触发。
为什么 postman.setNextRequest() 在单个请求里没反应
这个函数只在批量执行上下文里起作用:Collection Runner、Newman、Monitor。你在某个请求的 Tests 里写了 postman.setNextRequest("登录成功后查询订单"),然后点单个 Send 按钮——它不会跳,也不会报错,只是静默忽略。这是设计使然,不是 bug。
常见错误现象:
- 写了跳转逻辑,但始终按 Collection 默认顺序跑完所有请求
- 在 Tests 里加了
console.log看到执行了,但下个请求还是没变 - 误以为“保存脚本就自动生效”,结果一直没进 Runner
正确做法:
- 务必通过顶部菜单 Runner 启动集合
- 确保目标请求(比如
"查询订单")在当前 Collection 中已存在且名称**完全匹配**(区分大小写、空格、标点) - 目标请求在 Runner 界面中必须处于勾选状态;未勾选 = 跳转失败,流程终止
pm.response.code 和 pm.response.json() 怎么安全取值
不能无条件解析响应体。HTTP 状态码非 2xx 时,responseBody 可能为空或不是 JSON,直接 JSON.parse() 会抛错,导致整个 Tests 脚本中断,setNextRequest 不执行。
推荐写法(带防御):
if (pm.response.code === 200) {
try {
var data = pm.response.json();
if (data.code === 0 || data.success === true) {
postman.setNextRequest("处理成功");
} else {
postman.setNextRequest("处理失败");
}
} catch (e) {
// 非法 JSON,走兜底
postman.setNextRequest("响应异常");
}
} else {
// HTTP 层失败,比如 502/401
postman.setNextRequest("服务不可用");
}
关键点:
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- 先判
pm.response.code,再决定是否解析 body -
pm.response.json()内部已做 try/catch,但返回 undefined 时仍需检查,别直接链式调用data.xxx.yyy - 避免用
responseBody字符串匹配,易受换行、空格、编码干扰
如何安全退出流程,避免死循环
最常踩的坑:A → B → A 这类循环没设退出开关,一跑就卡死。Postman 不提供超时中断机制,只能靠逻辑终止。
有效终止方式只有两种:
-
postman.setNextRequest("null"):明确告诉 Postman “到此为止”,后续请求全部跳过 - 不调用
postman.setNextRequest():让流程自然落到默认顺序的下一个请求(如果当前是最后一个,则停止)
示例(轮询订单状态,最多试 5 次):
var count = pm.environment.get("poll_count") || 0;
if (count
<p>注意:</p>
- 用环境变量(
pm.environment.set)存计数,别用全局变量(pm.globals.set),避免跨 Runner 污染 - 每次 Runner 开始前,手动清空
poll_count,否则第二次跑直接跳null -
"null"是字符串字面量,不是 JS 的null值,写错就变成跳一个叫 “null” 的请求
真正难的不是写条件跳转,而是把「什么时候该停」想清楚并固化成可验证的逻辑。很多流程卡住,问题不出在代码,而出在业务规则没定义清楚——比如“失败重试几次”“超时怎么算”“什么响应才算终态”。这些必须在写 setNextRequest 前就确定下来,否则调试时只能靠删日志、改断点硬扛。










