Postman请求头不自动随环境切换,需显式引用{{variable_name}}或用Pre-request Script动态注入;变量优先级为local>collection>environment>global,务必确认环境已正确选中且变量名准确无误。

Postman 里请求头不能自动随环境切换——它压根不“认”环境变量,除非你显式写 {{variable_name}} 或用脚本注入。
Header 中直接引用环境变量
这是最轻量、最常用的方式,适用于固定值或简单组合的头字段(如 Content-Type、Authorization、api-version)。
- 在 Environment 管理中定义变量,比如
auth_token值为abc123,content_type值为application/json - 在请求的 Headers 标签页里,填入:
Authorization:Bearer {{auth_token}}Content-Type:{{content_type}} - 切换环境后,只要对应环境里有同名变量且值不同,Header 就会实时替换
- ⚠️ 注意:
{{auth_token}}如果在当前选中环境里不存在,Postman 不报错,但会原样发出去——比如发成Bearer {{auth_token}},后端直接 401
Pre-request Script 动态生成 Header
适合需要运行时计算的头,比如签名时间戳、随机 nonce、MD5/SHA 签名、AES 加密值等。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- 在请求或集合的
Pre-request Script标签页中写 JS,用pm.request.headers.add()注入 - 示例:添加带时间戳的
Sign-Time和拼接计算出的Sign
const signTime = Math.floor(Date.now() / 1000);
const secret = pm.environment.get("api_secret") || "default_secret";
const dataStr = request.data || "";
const sign = CryptoJS.MD5(`${dataStr}${secret}${signTime}`).toString();
pm.request.headers.add({key: "Sign-Time", value: signTime.toString()});
pm.request.headers.add({key: "Sign", value: sign});
CryptoJS 是 Postman 内置库,但 request.data 在 GET 请求中为空,需先判断方法类型;另外,pm.environment.get() 返回 undefined 时别直接拼进字符串,否则签名失效避免混用全局/环境变量导致覆盖冲突
很多人把 auth_token 同时设在 Globals 和 Environment 里,结果切环境后 Header 没变——其实是环境变量没生效,全局变量“抢答”了。
- Postman 变量优先级是:
local > collection > environment > global - 如果
auth_token在 Globals 里写了xyz789,又在 Test Env 里写了abc123,但你没选中 Test Env(右上角下拉框显示的是 No Environment 或别的),那 Header 里就永远是xyz789 - 调试技巧:在 Pre-request Script 里加一行
console.log("token:", pm.environment.get("auth_token"));,然后打开 Postman Console(View → Show Postman Console)确认取到的值对不对 - 更稳妥的做法:只用 Environment 变量管理所有环境差异项,Globals 仅放真正全局不变的常量(如
company_name)
真正容易被忽略的点不是“怎么写”,而是“谁在管这个变量”——每次 Header 不生效,第一反应不该是改脚本,而是打开右上角 Environment 下拉框,确认它真的被选中了,并且那个环境里确实定义了你要用的变量名。变量名拼错一个字母、大小写不一致、或者环境没保存成功,都会让 {{xxx}} 彻底静默失效。

















