最稳方式是直接调用pm.response.json()提取JSON响应,它自动解析并容错,避免JSON.parse(responseBody)在空响应或HTML错误页时抛SyntaxError;需先验证响应结构、加防御性判断,并注意变量命名规范与转义处理。

Postman里用pm.response.json()提取响应字段最稳
直接调用pm.response.json()是安全提取 JSON 响应的起点,它会自动解析响应体,失败时抛错并中断脚本——这反而是好事,能立刻暴露格式问题。别用JSON.parse(responseBody),因为responseBody是字符串,但某些响应(比如空体、HTML 错误页)会导致JSON.parse报SyntaxError,而pm.response.json()内部做了容错处理。
常见错误现象:脚本执行后变量没设上,控制台报TypeError: Cannot read property 'xxx' of undefined——大概率是data字段不存在,或嵌套层级和预期不符。
- 先确认响应结构:点开 Response → Pretty,看实际返回是否真有
data、userinfo这些 key - 用
console.log(pm.response.json())打印完整响应,避免凭印象写路径 - 加防御性判断,比如
if (res && res.data && Array.isArray(res.data))再取值 - 若响应中
data是字符串(如"{\"userid\":123}"),必须二次解析:JSON.parse(res.data).userid
把提取的值塞进下一个请求的 JSON Body 用{{variable}}就行
Postman 的变量插值在 raw JSON body 中完全可用,但必须满足两个前提:Body 类型选raw + 下拉菜单选JSON;且变量名不能含点号或中划线(corpId合法,user.id不合法)。
使用场景:A 接口登录返回 token,B 接口调用需在 JSON body 里带上这个 token 字段。
- 在 Tests 里设全局变量:
pm.globals.set("auth_token", pm.response.json().token) - 下一个请求的 Body 写:
{"action":"update","token":"{{auth_token}}"} - 注意:如果变量值本身含双引号或换行,JSON 会解析失败,此时得用 Pre-request Script 处理转义
- 别在 URL 参数或 Headers 里用
{{variable}}时忘记配环境变量作用域——全局变量用{{var}},环境变量得先选对 Environment
pm.sendRequest发内网请求传参容易漏掉Content-Type
想在 Tests 里调另一个接口(比如写日志、触发回调),用pm.sendRequest发 POST,body 是 JSON,但默认不带Content-Type头,服务端收不到数据或 415 报错。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
性能影响:这个函数是异步的,不会阻塞当前请求流程,所以不适合依赖它返回结果再继续后续断言。
- 必须显式加 header:
header: {"Content-Type": "application/json"} - body 要用
raw模式传字符串:raw: JSON.stringify({id: pm.variables.get("id")}) - 错误类型常见
TypeError: Failed to fetch——多半是 URL 写成localhost但 Postman 运行在沙盒里访问不了本地服务,换127.0.0.1或部署到可访问地址 - 别在
pm.sendRequest回调里设全局变量后,指望下一个请求立刻读到——它执行时机不确定,变量可能还没写入
CSV/JSON 参数化时变量进 JSON Body 要小心类型丢失
用 CSV 文件批量跑请求,字段price值为"1,299"(带千分位逗号),在 JSON body 里写"price": {{price}},结果变成"price": 1,299——JSON 语法错误,服务端拒收。
兼容性影响:这种错误在单条测试时不易发现,一跑 CollectionRunner 就集体 400。
- 方案一:CSV 里存纯数字
1299,body 写"price": {{price}}(无引号) - 方案二:CSV 里保留
"1,299",Pre-request Script 里用pm.variables.replaceIn("{{price}}")取值后再手动加引号:"price": "{{price}}" - 方案三:统一用 Pre-request Script 解析变量并构造整个 body 对象,再
pm.request.body.raw = JSON.stringify(obj) - 永远别信 CSV 编码——用记事本另存为 UTF-8 无 BOM,否则中文变乱码
复杂点在于嵌套 JSON 字段的提取和拼装,比如响应是{"result":{"items":[{"id":1},{"id":2}]}},你要把items数组整个塞进下一个请求的data字段——这时JSON.stringify()和JSON.parse()来回转换极易出错,建议用 Pre-request Script 构造对象,而不是拼字符串。










