Postman中Token必须存为环境变量并动态提取:登录Tests脚本用pm.environment.set()存token,根据后端响应结构(如data.access_token或纯文本)安全取值,Header中用{{token}}引用并确认环境已选中。

Postman 里 Token 必须存成环境变量,而不是手动复制粘贴——否则每次登录换 token 都得重填,接口一多就崩。
登录响应里提取 token 的常见结构差异
不同后端返回的 token 字段位置千差万别,直接写 pm.response.json().token 很容易报错 Cannot read property 'token' of undefined。
- Spring Security 常见结构:
response.data.access_token或response.result.token - JWT 直接返回字符串:响应体是纯文本,需用
pm.response.text()而非pm.response.json() - 带 code 状态码包裹:先判断
response.code === 200再取response.data.token,避免空值崩溃 - 嵌套过深时建议加
console.log(pm.response.json())到Tests里看真实结构
Tests 脚本里存环境变量的写法和坑
必须在登录请求的 Tests 标签页写脚本,Pre-request Script 里无法读取响应内容。
Sa-Token Java 权限认证框架最佳实践助手——28 条常见错误纠偏、6 个关键决策检查点、14 篇全本地自包含 references,从集成到微服务网关鉴权一步到位。
- 正确写法:
pm.environment.set("token", jsonData.data.access_token) - 别用已废弃的
postman.setEnvironmentVariable(),新版 Postman 会静默失败 - 变量名别含空格或特殊字符,比如
access token会导致{{access token}}解析失败 - 如果想跨环境复用(如本地/测试/生产共用一套集合),优先用
pm.environment.set()而非pm.globals.set(),后者污染全局
后续请求怎么安全引用 token
Header 里写 Authorization: Bearer {{token}} 最常用,但要注意三点:
- 确保右上角环境已选中,否则
{{token}}渲染为空字符串,后端返回401 Unauthorized - 某些老系统要求
X-Access-Token: {{token}}或token: {{token}},不能硬套 Bearer 模式 - 如果 token 过期后请求失败,别急着重跑登录——先检查
pm.environment.get("token")是否真有值,有时脚本执行失败但没报错,变量实际为空 - 敏感 token 建议设为环境变量的 “Current value” 留空,“Initial value” 填占位符(如
dummy_token),防止误导出泄露
多环境自动切 token 的关键逻辑
靠一个变量区分环境还不够,得让登录脚本自己判断该取哪个 token 字段、连哪个 base_url。
- 在
Tests里用pm.environment.get("env")获取当前环境名,再分支处理:if (env === "prod") { ... } - 避免把所有 token 都塞进同一套环境变量,比如
prod_token和test_token分开存,防止切换环境后残留旧值 - 预请求脚本里调用
pm.sendRequest自动补登录,只适合调试;正式集合测试时建议显式分两步:先跑登录,再跑业务接口,否则链路断裂难排查
真正麻烦的不是存 token,而是响应结构不统一 + 环境变量没及时刷新 + Header 拼写大小写错误——这三处出问题,90% 的 401 都能定位到。

















