Postman中必须用Tests脚本自动提取Token并注入变量,不可手动复制;需先确认响应结构、校验状态码、正确设置作用域(推荐集合变量),并在业务接口Pre-request Script中校验token存在性,防止空值请求。

Postman 里不能靠“手动复制 token”或“浏览器拖 Cookie”来跑关联流程——这类操作在自动化、批量或 CI 环境下必然失败,必须用 Tests 脚本提取 + 变量注入的方式闭环。
登录接口的 Tests 脚本怎么写才可靠
关键不是“能不能取到 token”,而是“取对位置、设对作用域、防空值崩溃”。常见错误是直接写 pm.response.json().token,但实际响应结构可能是 { "code": 200, "data": { "token": "xxx" } } 或 { "access_token": "xxx", "expires_in": 3600 }。
- 先用
console.log(pm.response.json())打印完整响应,确认字段路径 - 用
pm.response.code === 200做前置判断,避免 token 提取时因登录失败报错中断 - 推荐用
pm.collectionVariables.set("token", jsonData.data.token)(设为集合变量),比环境变量更易管理多套流程 - 如果 token 在响应头(如
Authorization: Bearer xxx),要用pm.response.headers.get("Authorization")提取,再切掉前缀
业务接口怎么安全引用登录结果
不是所有接口都把 token 放在 URL 或 Body 里,90% 的现代 API 要求它出现在请求头 Authorization 中。直接写 {{token}} 很危险——万一登录没跑、变量为空,请求会发出去但带空头,后端可能返回 401 或 500,还难定位。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- 在业务接口的
Headers里填:Authorization→Bearer {{token}} - 加一层防御:在业务接口的 Pre-request Script 中写
if (!pm.collectionVariables.get("token")) { throw new Error("Missing login token — run login request first"); } - 如果接口文档要求 token 放 query(如
?token=xxx),注意 URL 编码问题,{{token}}会自动编码,但手动拼接时需用encodeURIComponent()
验证码/动态参数导致登录总失败怎么办
当登录接口依赖图形验证码、短信验证码或临时 UUID(比如 captchaId),单纯重放登录请求必失败。必须把“获取动态参数”拆成独立请求,并确保执行顺序。
- 新建一个请求叫
get-captcha,URL 是验证码接口(如/api/captcha),Tests 中提取pm.response.json().uuid并存为captcha_uuid - 登录请求的 Body 中,把原固定值换成
"captchaId": "{{captcha_uuid}}" - 在 Collection Runner 中勾选
Continue running after a failure不够用——必须用Run in sequence模式,且把get-captcha放在登录请求之前 - 别用全局变量存验证码;集合变量或环境变量都行,但要确保每次运行前清空(可在 Pre-request Script 里加
pm.collectionVariables.unset("captcha_uuid"))
为什么用 Cookie 方式登录在 Postman 里不推荐
Postman 默认不自动维护 Cookie 会话(除非开启 Automatically persist cookies,但该选项在 v10+ 中默认关闭且不稳定)。靠手动粘贴 Set-Cookie 值或从浏览器复制 Cookie 头,会导致两个严重问题:
- Session ID 过期时间短(如 30 分钟),本地调试没问题,但用 Newman 跑定时任务时大概率失效
- Cookie 包含多个键值对(如
PHPSESSID=xxx; path=/; HttpOnly),只复制值不带 domain/path 属性,服务端拒绝识别 - 真正需要 Cookie 认证的场景(如老系统 PHP+Session),应优先改用
pm.sendRequest在脚本中完成登录并显式读取pm.response.headers.get("Set-Cookie"),再注入后续请求头,而不是依赖界面粘贴
最易被忽略的一点:Collection Runner 执行时,每个请求是独立上下文,Pre-request Script 和 Tests 不跨请求共享内存——所有变量传递必须经由 pm.*Variables 显式设置,漏设就等于没传。

















