在 Tests 中提取 JSON 返回值需先用 JSON.parse() 解析 responseBody,再通过正确路径取字段并用 pm.environment.set() 设为环境变量;非 JSON 响应须加 try-catch 并改用正则或字符串方法安全提取。

怎么在 Tests 里提取 JSON 返回值并设为环境变量
Postman 本身不自动解析响应体,必须手动用 JSON.parse() 转成对象才能取字段。如果跳过这步直接写 responseBody.token,脚本会静默失败,变量根本不会设置成功。
常见错误现象:pm.environment.set("xxx", responseBody.token) 看似简洁,实际返回 undefined,后续接口调用时参数变成 {{xxx}} 原样发送,400 或 401 错误频发。
- 先加 try-catch 包裹解析逻辑,避免因非 JSON 响应(比如 502 HTML 页面)导致整个脚本中断
- 确认字段路径是否准确——比如
data.data.token和data.token差一个层级,就取不到值 - 用
console.log()打印中间结果,比如console.log(json),比盲目猜结构快得多 - 设环境变量用
pm.environment.set("key", value),不是postman.setEnvironmentVariable(已废弃)
查询参数(Params)里怎么正确引用变量
变量名必须用双大括号包裹,且不能带空格或特殊字符;{{access_token}} 可以,{{ access_token }} 或 {{access-token}} 都会失效。
使用场景:GET 请求的 URL 查询参数、POST 的 x-www-form-urlencoded 表单字段、甚至 raw JSON body 里的字段值(只要该字段是字符串类型)。
- 变量未定义时,Postman 不报错,只是原样发送
{{xxx}}字符串,后端通常解析失败 - 如果参数需要 URL 编码(比如城市名含中文),
{{city}}不会自动编码,得改用{{encodeURIComponent(city)}}——但注意:这个函数只能在 Pre-request Script 里调用,不能直接写在 Params 输入框中 - 多个参数共用同一变量时,比如
token同时用于 Header 和 Params,只需设一次变量,多处引用即可
为什么 Pre-request Script 有时比 Tests 更适合传参
Tests 在响应收到后执行,适合「保存上一个请求的结果」;Pre-request Script 在请求发出前执行,适合「动态生成当前请求的参数」。两者职责不同,混用会导致逻辑错乱。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
典型误用:在第二个接口的 Tests 里设变量,又想在同一个接口的 Params 里引用它——不可能,因为 Params 在 Tests 之前就已拼装完成。
- 若需对变量做处理(如拼接字符串、截取、编码),必须放在 Pre-request Script 中,再赋值给另一个变量供 Params 引用
- 例如:从环境变量
city得到“北京”,想在 Params 里传city=beijing,就得在 Pre-request Script 写:pm.environment.set("city_code", "beijing"); - 全局变量(
pm.globals)和环境变量(pm.environment)互不影响,别把pm.globals.set和{{xxx}}混用——除非你明确在 Globals 里设了,且没创建任何环境
返回值不是 JSON 怎么安全提取字段
遇到 HTML、XML、纯文本或格式错乱的响应,JSON.parse() 必然抛错,脚本中断。这时候得换正则或字符串方法,但必须加防御性判断。
错误示例:responseBody.match(/value="(.+?)"/)[1] ——如果匹配不到,[1] 会报 Cannot read property '1' of null。
- 先用
responseBody.includes("expected_string")粗略校验内容是否存在 - 正则提取前检查匹配结果:
const match = responseBody.match(/access_token=([^&]+)/); if (match && match[1]) { pm.environment.set("access_token", match[1]); } - HTML 场景慎用
match(),推荐用DOMParser(仅限 Postman v10+ 支持)或更鲁棒的子串截取,比如responseBody.substring(start, end) - 提取失败时,建议在 Tests 里加断言:
tests["Extracted token"] = pm.environment.get("access_token") !== undefined;,方便快速定位哪步断了
变量作用域和执行时机是关联失效最常被忽略的点——不是代码写错了,而是没搞清 Tests 和 Pre-request Script 的先后关系,也不是 JSON 解析失败,而是压根没处理非 JSON 响应的兜底逻辑。










