Postman变量存在于环境变量、全局变量、集合变量三层,作用域与生命周期不同;清理需按层分别操作,且必须用unset或clear方法而非赋空值,否则键仍存在。

Postman 中的变量到底存在哪几个地方
Postman 的变量分三层:环境变量(environment)、全局变量(globals)、集合变量(collection.variables),三者作用域和生命周期不同。脚本里删错地方,变量依然残留——比如你只清了 environment,但实际想删的是 globals,那下次请求还会读到旧值。
检查当前生效变量最直接的方式是打开 Postman 控制台(View → Show Postman Console),在任意请求的 Pre-request Script 或 Tests 里加一行:
console.log(pm.variables.toObject());它会打印出当前所有已解析(即被继承、覆盖后)的变量快照,不是原始定义源。
用脚本清空环境变量的正确写法
Postman 不提供 pm.environment.clear() 这种方法,必须逐个删除。常见错误是直接赋 null 或空字符串,这其实没删掉键,只是让值变为空,pm.environment.has("key") 仍返回 true。
- ✅ 正确方式是调用
pm.environment.unset("key") - ✅ 批量清空全部环境变量:
Object.keys(pm.environment.toObject()).forEach(key => pm.environment.unset(key));
- ⚠️ 注意:如果环境未选中(即右上角环境下拉显示 “No environment”),
pm.environment是null,直接调用toObject()会报错Cannot read property 'toObject' of null
全局变量不能靠环境脚本自动清理
全局变量(globals)独立于环境,不会随环境切换而重置,也不会被集合或请求脚本默认访问。很多人误以为在 Pre-request Script 里删 pm.environment 就够了,结果全局变量还在后台偷偷生效。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
要删全局变量,必须手动进 UI 点击 Globals 编辑界面清空,或者用脚本(仅限 Collection Runner 或 Newman 运行时):
- ✅ 在任意请求的 Tests 脚本中运行(需确保有全局变量权限):
pm.globals.clear(); // Postman v9.15+ 支持
- ⚠️ 低于 v9.15 的版本不支持
clear(),只能:Object.keys(pm.globals.toObject()).forEach(key => pm.globals.unset(key));
- ⚠️
pm.globals.clear()在 Postman Desktop App 中有效,在 Web 版或某些旧版本中可能静默失败,建议加兜底判断:if (typeof pm.globals.clear === "function") { pm.globals.clear(); } else { /* 逐个 unset */ }
集合变量清理要确认作用域是否生效
集合变量(collection.variables)只在集合级别定义,脚本中通过 pm.collectionVariables 访问。它和环境变量互不影响,但优先级低于环境变量——也就是说,即使你删了集合变量,同名环境变量仍会覆盖它。
- ✅ 清空集合变量:
Object.keys(pm.collectionVariables.toObject()).forEach(key => pm.collectionVariables.unset(key));
- ⚠️ 集合变量无法在单个请求的脚本中“新增”,只能在集合设置页定义;但可以删——前提是该集合已加载且变量已解析
- ⚠️ 如果你在 Tests 脚本里删集合变量,它只影响后续请求,当前请求中
pm.variables.get("x")仍能取到值(因为变量已在请求开始前解析完毕)
真正麻烦的不是怎么删,而是删完之后变量还“阴魂不散”——往往是因为你删的是 A 层,但实际生效的是 B 层,或者控制台缓存了旧变量快照。每次清理前,先用 pm.variables.toObject() 看清当前真实变量集,比盲目跑脚本有用得多。

















