Postman Collection Runner 里怎么在每次迭代后清空环境变量?

新艳 阅读 22

我在用 Postman 的 Collection Runner 做批量测试,每个请求都依赖上一个的响应数据,但发现环境变量会残留到下一次迭代,导致结果混乱。试过在 Tests 里用 pm.environment.unset(),但好像没生效?

比如我这样写:

pm.test("清理临时变量", function () {
    pm.environment.unset("tempToken");
    pm.environment.unset("userId");
});

可跑完几轮后还是发现 tempToken 被复用了,是不是 Collection Runner 的执行上下文有问题?

我来解答 赞 7 收藏
二维码
手机扫码查看
1 条解答
小海霞
小海霞 Lv1
你这个问题不是 Postman 的上下文问题,而是你用错了 API —— pm.environment.unset() 确实能清掉变量,但 Postman 的 Collection Runner 默认用的是 环境作用域,而你可能没选对环境,或者变量其实写到了全局(global)里去了。

先确认三点:

第一,你跑 Runner 的时候,右上角选的环境是不是你测试用的那个?如果没选,或者选错了,unset() 就没作用。

第二,检查下你变量到底是怎么设置的,有没有可能用的是 pm.globals.set() 而不是 pm.environment.set()?全局变量在 Runner 里是跨迭代共享的,而且 unset() 要明确指定作用域才生效。

第三,最稳妥的做法是在迭代开始前主动清空,而不是在结尾设清理脚本——因为 Runner 的迭代是串行的,前一轮的结尾清理可能赶不上下一轮的开头读取。

建议这么写,在每个请求的 Pre-request Script 里加:

pm.environment.unset("tempToken");
pm.environment.unset("userId");


或者更狠一点,在 Collection 级别加一个前置请求(比如叫 “init”),专门用来重置变量,放在 Runner 的最前面跑一轮清一次。

我以前也踩过这个坑,以为 Tests 里清就完事了,结果 Runner 的执行顺序比你想的要“急”,变量还没清完,下一个请求已经发出去了。

再补充一句:如果变量是从上一个请求动态 set 的,比如 pm.environment.set("tempToken", pm.response.json().token),那记得检查响应里是不是真返回了东西——有时候接口挂了但你还在设值,导致变量残留旧值,清都清不掉。

真要 debug,可以在 Tests 里加个打印:
console.log("Before unset:", pm.environment.get("tempToken"));
pm.environment.unset("tempToken");
console.log("After unset:", pm.environment.get("tempToken"));

然后看 Runner 的控制台输出,一目了然。
点赞
2026-02-24 15:00