Postman Collection Runner 里怎么在每次迭代后清空环境变量?
我在用 Postman 的 Collection Runner 做批量测试,每个请求都依赖上一个的响应数据,但发现环境变量会残留到下一次迭代,导致结果混乱。试过在 Tests 里用 pm.environment.unset(),但好像没生效?
比如我这样写:
pm.test("清理临时变量", function () {
pm.environment.unset("tempToken");
pm.environment.unset("userId");
});
可跑完几轮后还是发现 tempToken 被复用了,是不是 Collection Runner 的执行上下文有问题?
先确认三点:
第一,你跑 Runner 的时候,右上角选的环境是不是你测试用的那个?如果没选,或者选错了,unset() 就没作用。
第二,检查下你变量到底是怎么设置的,有没有可能用的是
pm.globals.set()而不是pm.environment.set()?全局变量在 Runner 里是跨迭代共享的,而且 unset() 要明确指定作用域才生效。第三,最稳妥的做法是在迭代开始前主动清空,而不是在结尾设清理脚本——因为 Runner 的迭代是串行的,前一轮的结尾清理可能赶不上下一轮的开头读取。
建议这么写,在每个请求的 Pre-request Script 里加:
或者更狠一点,在 Collection 级别加一个前置请求(比如叫 “init”),专门用来重置变量,放在 Runner 的最前面跑一轮清一次。
我以前也踩过这个坑,以为 Tests 里清就完事了,结果 Runner 的执行顺序比你想的要“急”,变量还没清完,下一个请求已经发出去了。
再补充一句:如果变量是从上一个请求动态 set 的,比如
pm.environment.set("tempToken", pm.response.json().token),那记得检查响应里是不是真返回了东西——有时候接口挂了但你还在设值,导致变量残留旧值,清都清不掉。真要 debug,可以在 Tests 里加个打印:
然后看 Runner 的控制台输出,一目了然。