Postman 中需用 pm.variables.set() 在接口 Pre-request Script 提前设置 skip_common_logic=true,再于 Collection 公共脚本开头用 pm.variables.get() 判断并 return 跳过执行;因 variables 是请求级作用域,安全且不污染环境。

Postman 无法在 Tests 或 Pre-request Script 中直接“跳过”其他脚本执行,但可以通过变量控制逻辑分支实现等效效果。 所有脚本(包括 Collection/Environment 级公共脚本)都会运行,关键在于让它们内部主动判断是否执行具体逻辑。
怎么用 pm.variables.get() 控制公共脚本是否生效
Postman 没有内置的「禁用某接口脚本」开关,但你可以约定一个变量名(如 skip_common_logic),在需要跳过的接口里提前设为 true,然后在公共脚本开头检查它:
- 在目标接口的 Pre-request Script 里加一行:
pm.variables.set("skip_common_logic", true); - 在 Collection 级的公共 Pre-request Script 开头写:
if (pm.variables.get("skip_common_logic") === true) { return; } - 注意:不能用
pm.environment.get()替代,因为variables是请求级作用域,更安全、不污染环境 - 如果用了
pm.globals.set(),会影响所有后续请求,容易引发意外覆盖
为什么 tests['xxx'] = false 不会中断执行
很多人误以为在 Tests 里写 tests['跳过断言'] = false 能阻止后续断言运行,其实这只是设置一个测试项为失败,pm.test() 或其他语句仍会继续执行:
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
-
tests对象只是 Postman 用来收集断言结果的普通 JS 对象,不是控制流开关 - 哪怕写了
tests['强制中断'] = false,下一行pm.test('校验token', () => {...})依然会执行 - 真正能提前退出的是
return(在函数内)或throw new Error()(但会标红报错,不推荐) - 所以条件控制必须靠
if + return,而不是靠tests赋值
Collection 级公共脚本里如何安全读取当前请求 URL
想让公共脚本只对特定路径生效(比如只处理 /api/v1/user,跳过 /health),得靠 pm.request.url 解析:
- 用
pm.request.url.getPath()获取路径部分(如/api/v1/user/list) - 避免直接字符串匹配
pm.request.url.toString(),因为它含协议、host、query,易误判 - 推荐写法:
const path = pm.request.url.getPath(); if (path.startsWith('/health') || path === '/ping') { return; } - 注意:Collection 公共脚本中不能访问
pm.response(响应还没发生),所以只能基于请求做判断
最易被忽略的一点是:变量作用域和执行顺序。pm.variables 在 Pre-request 阶段设,在 Tests 阶段仍可读,但 Collection 级 Pre-request 脚本总是在单个接口自己的 Pre-request 之前运行——这意味着你不能在接口脚本里“后设变量”来影响公共脚本,必须反过来,在接口里提前设好,再由公共脚本读取判断。










