Postman中变量残留是因未主动清理或覆盖,需在Pre-request Script用pm.environment.unset()初始化,并在Tests脚本中校验后赋值,避免误用旧值。

Postman 里测试脚本读到的变量还是上一次请求留下的,说明变量没被及时清理或覆盖 —— 这不是 bug,是变量作用域和生命周期管理没到位。
为什么 pm.environment.get() 总拿到旧值
环境变量不会自动刷新,也不会随请求结束而失效。比如你在登录接口的 Tests 脚本里写了 pm.environment.set("access_token", responseJSON.token),这个值会一直保留在当前选中的环境里,直到你显式清除或覆盖它。
常见诱因包括:
- 登录失败但脚本仍执行了
pm.environment.set()(比如 responseJSON.token 是 undefined,结果存了个空字符串) - 切换了环境但忘了检查该环境是否真有对应变量,
pm.environment.get("access_token")返回undefined,后续请求却用它拼 Authorization 头,导致 401 - 多个集合共用同一套环境,A 集合设了
user_id,B 集合没设也没清,结果 B 误用了 A 的值
清除单个环境变量的正确写法
别再用过时的 postman.clearEnvironmentVariable()(已废弃),现在统一用 pm.environment.unset()。
在 Pre-request Script 或 Tests 脚本中加一行即可:
Postman Mac版是一款专为macOS设计的API开发与测试工具,凭借简洁的界面和强大的功能,深受开发者喜爱。它支持发送各种HTTP请求(GET、POST、PUT等),轻松管理接口集合、环境变量和模拟服务器。Mac用户可享受原生性能、快捷键优化及与系统无缝集成的体验,适用于接口调试、自动化测试和文档生成。无论是个人项目还是团队协作,Postman for Mac都能提升API开发效率,是ma
pm.environment.unset("access_token");
如果要清多个,可以链式调用:
pm.environment.unset("access_token");
pm.environment.unset("user_id");
pm.environment.unset("session_id");
注意:pm.environment.unset() 不报错,即使变量不存在也会静默执行 —— 所以放心放在 Pre-request 脚本开头,作为“安全初始化”步骤。
批量清理 + 防误用的组合策略
只清个别变量不够稳,尤其在调试阶段或 CI 自动化运行时。推荐在集合层级统一处理:
- 在集合的 Pre-request Script 里,先清掉所有可能干扰的变量:
pm.environment.unset("access_token"); pm.environment.unset("refresh_token"); - 在登录接口的 Tests 脚本末尾,加一层校验再赋值:
const res = pm.response.json(); if (res && res.access_token && typeof res.access_token === "string" && res.access_token.length > 10) { pm.environment.set("access_token", res.access_token); } else { console.error("Invalid or missing access_token in response"); } - 避免全局变量污染:不要用
pm.globals.set()存 token 类动态值,除非你明确需要跨环境复用 —— 绝大多数情况,环境变量更安全、更可控
最常被忽略的一点:Postman 的变量读取是同步且无缓存机制的,所谓“拿到旧值”,99% 是因为没人主动 unset 或覆盖。别依赖“下次请求会冲掉”,得自己动手清。
















