必须用 JSON.parse(responseBody) 解析响应体,否则取嵌套字段如 data.token 会报 TypeError;推荐在 Tests 首行加 try...catch 解析,并用 console.log(data) 确认结构,再通过 pm.environment.set() 批量存值,注意变量名规范、存在性判断及大小写敏感。

提取多个字段必须用 JSON.parse(responseBody) 解析响应体
Postman 的 responseBody 是原始字符串,不解析就直接取值会报 TypeError: Cannot read property 'xxx' of undefined。尤其当接口返回嵌套结构(比如 data.token、data.userId、data.expire)时,漏掉 JSON.parse() 是最常见失败原因。
实操建议:
- 始终把解析逻辑放在 Tests 里第一行,避免后续取值出错
- 加
try...catch防止解析失败导致脚本中断:try { var data = JSON.parse(responseBody); } catch (e) { console.error("JSON parse failed:", e); tests["Response is valid JSON"] = false; } - 确认字段路径是否正确——用
console.log(data)打印看实际结构,别凭接口文档硬写
用 pm.environment.set() 或 pm.globals.set() 批量存字段
环境变量和全局变量都能存多个值,但作用域不同:环境变量只在当前环境生效,适合多套测试环境(如 dev/test/prod);全局变量跨环境可用,但容易污染,调试时难定位来源。
推荐做法是统一用环境变量,批量设置示例如下:
var data = JSON.parse(responseBody);
pm.environment.set("token", data.data.token);
pm.environment.set("user_id", data.data.userId);
pm.environment.set("expire_at", data.data.expire);
pm.environment.set("session_key", data.data.sessionKey);
注意点:
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- 变量名不要含空格或特殊符号,否则
{{variable name}}会失效 - 如果字段可能为
null或不存在,先做存在性判断:data.data?.token(需 Postman v10.22+)或传统写法data.data && data.data.token - 不要在同一个 Tests 脚本里重复调用
pm.environment.set("x", ...)多次设同名变量——后一次会覆盖前一次,但不会报错,容易误判
在下一个接口中用 {{token}}、{{user_id}} 等方式并行引用
Postman 支持在 URL、Headers、Body(raw/json/form-data)任意位置用双大括号插值,且可混用。比如一个查询接口需要同时传 token 和 user_id:
- URL 中:
https://api.example.com/orders?userId={{user_id}} - Headers 中:
Authorization: Bearer {{token}} - Body(JSON)中:
{ "userId": "{{user_id}}", "limit": 20, "sessionKey": "{{session_key}}" }
关键提醒:
- 变量名大小写敏感——
{{User_ID}}和{{user_id}}是两个变量 - 如果某个变量未定义,Postman 默认渲染为空字符串,不会报错,但后端可能直接 400;建议在 Tests 里加断言:
tests["token exists"] = pm.environment.get("token") !== undefined; - form-data 类型 Body 中不能直接用
{{xxx}},必须切到 Text 模式粘贴,否则会被当作文本字面量
复杂嵌套或非 JSON 响应要用 responseBody.match() 或 xml2Json()
当接口返回 XML、纯文本、HTML 或不规范 JSON(比如带 BOM、换行符异常)时,JSON.parse() 会失败。这时得换策略:
- XML 响应:先用
xml2Json(responseBody)转对象再取值(Postman 内置函数,无需额外引入) - 纯文本或 HTML:用正则提取,例如从
Set-Cookie: sessionid=abc123; Path=/中取 sessionid:var match = responseBody.match(/sessionid=([^;]+)/); if (match) pm.environment.set("sessionid", match[1]); - 响应头中取值:
pm.environment.set("X-RateLimit-Remaining", pm.response.headers.get("X-RateLimit-Remaining"));
最容易被忽略的一点:正则匹配结果为 null 时,直接取 match[1] 会报错,务必先判空。

















