pm.response.json()是最安全获取JSON响应的方式,自动处理解析失败;取值前需用console.log()确认结构,避免链式访问错误;token等可能在headers或cookies中,需按实际位置提取。

直接用 pm.response.json() 获取完整响应对象
Postman 的 Tests 脚本里,pm.response.json() 是最安全、最推荐的方式获取整个 JSON 响应体。它自动处理解析失败(比如空响应、非 JSON 内容),抛出可捕获的错误,比手动 JSON.parse(responseBody) 更健壮。
- 如果响应是纯 JSON(如
{"data": {"id": 123}, "code": 0}),pm.response.json()返回的就是一个 JS 对象,可直接点取或遍历 - 如果响应不是合法 JSON(比如 HTML 错误页、空 body、XML),
pm.response.json()会报错,脚本中断 —— 这其实是好事,能帮你快速发现接口异常,而不是静默失败 - 不要在未校验前就链式取值,例如
pm.response.json().data.id,一旦中间某层不存在(如data为null或undefined),会报Cannot read property 'id' of undefined
提取后存到环境变量还是全局变量?看使用场景
环境变量(pm.environment.set())和全局变量(pm.globals.set())本质区别不在“作用域大小”,而在于「隔离性」和「生命周期」。
- 用环境变量:多个测试集共用同一套变量名但指向不同值(比如 Dev / Test / Prod 环境下
base_url不同),且变量随环境切换自动生效;适合绝大多数接口关联场景 - 用全局变量:值对所有环境都可见,但无法按环境区分;适合跨环境共享的固定配置(如通用签名 salt)、或临时调试时快速写入/查看
- 千万别混用:比如用
pm.environment.set("token", ...)存,却在 Header 里写{{global_token}}—— 变量名不匹配就取不到,也不会报错,只会发空值请求
响应结构嵌套深、字段不确定?先打印再取值
很多新手卡在“明明写了 jsonData.data.token 却取不到”,根本原因是没确认实际返回结构。别猜,用 console.log() 直接看。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- 在 Tests 中加一行:
console.log(pm.response.json()),发送请求后点左下角 Console 查看原始结构 - 注意常见陷阱:
data可能是数组(得用[0].token),可能是null(需加if (jsonData.data)判断),也可能被包在result或payload里 - 如果响应是数组(如
[{"id":1},{"id":2}]),直接pm.response.json()[0].id就能取第一个元素,不用额外 parse - 如果响应是字符串但不是 JSON(比如带 BOM 的 UTF-8 字符串),
pm.response.json()会失败,此时要先清理:用pm.response.text().trim()+JSON.parse()手动处理
需要提取 header 或 cookie?别只盯着 body
Token 不一定都在响应体里。有些服务把 access_token 放在 Set-Cookie 头,或把 X-Auth-Token 放在响应头中 —— 这时候从 body 解析 JSON 完全无效。
- 取响应头:
pm.response.headers.get("X-Auth-Token")或pm.getResponseHeader("X-Auth-Token")(旧语法仍可用) - 取 Set-Cookie 中的 token:
pm.cookies.get("auth_token")(前提是服务端设置了HttpOnly=false) - 取任意 header 的原始字符串:
pm.response.headers.find(x => x.key === "Content-Type")?.value - header 名大小写不敏感,但建议按服务端返回的原始大小写写(比如
"Access-Token"和"access-token"都可能命中)
复杂点往往不在“怎么取”,而在“取之前没看清响应长什么样”。多点两下 Console,比翻十篇教程更管用。










