最可靠方式是在Collection级Pre-request Script中用pm.request.headers.add()动态添加请求头,值从环境变量读取并确保环境已正确选中。

Postman 里集合(Collection)下所有请求统一加请求头,最可靠、最常用的方式是用 Pre-request Script + 环境变量(或全局变量),而不是依赖“继承 Authorization”这种容易被覆盖或误解的机制。
Collection 级 Pre-request Script 是首选方案
Postman 的集合层级支持编写 Pre-request Script,它会在该集合下每个请求发送前自动执行。这是真正可控、可复用、可调试的统一入口。
- 脚本中调用
pm.request.headers.add()可以动态添加任意数量的 header,比如Authorization、X-Trace-ID、Cookie - 值可以来自
pm.environment.get("token")、pm.globals.get("api_version"),甚至能拼接、计算(如时间戳、签名) - 如果某请求需要临时禁用某个公共 header,可在该请求自己的 Headers 标签页里手动 disable 对应项,不会影响其他请求
- 注意:不能在脚本里用
pm.request.headers.upsert()—— Postman 沙箱不支持这个方法,只支持add()和remove()
环境变量必须提前设置并选中
脚本里读不到变量,90% 是因为环境没选对,或者变量名写错(大小写敏感、空格、下划线混淆)。
- 变量定义位置:右上角环境切换器 →
Manage Environments→ 新建或编辑环境 → 添加键值对,例如auth_token:abc123 - 必须在右上角下拉菜单中**手动选中该环境**,否则
pm.environment.get("auth_token")返回undefined - 若想跨环境复用(如测试/预发/生产),建议把 token 放在各自环境里,脚本保持不变;不要把 token 写死在脚本里
- 调试技巧:在脚本开头加
console.log("token:", pm.environment.get("auth_token")),然后打开 Postman Console(View → Show Postman Console)查看输出
别误信“继承 Authorization”能覆盖所有场景
Collection 设置了 Authorization 类型(如 Bearer Token),确实会让子请求默认继承 —— 但这个机制只管 Authorization 这一个 header,且行为隐式、难调试。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- 它不会帮你加
Content-Type、Accept、X-Request-ID等其他通用 header - 如果某个请求在自己的 Headers 标签页里也写了
Authorization,Postman 会以**请求级配置为准**,悄悄覆盖掉 Collection 级设置,你很难发现 - Bearer Token 值若来自接口返回,必须靠脚本提取并写入环境变量,Collection 的 UI 表单无法自动刷新 token
- 一旦用了脚本加 header,就建议把 Collection 的 Authorization 设置清空,避免双路径冲突
常见错误和绕不开的细节
实际落地时卡住的地方,往往不是语法,而是变量生命周期和执行顺序。
-
pm.request.headers.add()必须在 Pre-request Script 中调用,不能放在 Tests 脚本里(Tests 是响应后执行的) - 多个
add()调用之间没有顺序依赖,但重复 key 会叠加(Postman 允许同名 header 多次出现,服务端是否接受取决于实现) - 如果 header 值含特殊字符(如空格、中文、换行),建议设
disableEncoding: true,例如:{key: "X-Note", value: "测试数据", disableEncoding: true} - 脚本中修改的是当前请求的副本,不影响其他请求或环境变量本身;要持久化 token,得靠 Tests 脚本配合
pm.environment.set()
真正麻烦的从来不是“怎么加”,而是“什么时候加、从哪取、加完怎么验证”。只要变量存在、环境选对、脚本位置正确,pm.request.headers.add() 这一行就能稳稳跑通整个集合。其他所有“看起来更省事”的方式,后期都会在 token 刷新、多环境切换、header 冲突时露出破绽。










