Postman集合级测试脚本调用pm.sendRequest()无法传递请求体怎么办
问题修复方案
问题原因
你代码中直接对pm.request.headers、pm.request.body调用toString()的写法不符合Postman SDK的使用规范:这两个对象都是Postman封装的专属结构化对象,直接转字符串无法生成pm.sendRequest()可识别的请求参数格式,最终会导致请求头解析异常、请求体为空的问题。
正确修改代码
// 构造请求参数 var request = { url: pm.variables.get("host") + pm.request.url.getPathWithQuery(), method: pm.request.method, // 把请求头转成键值对对象 header: pm.request.headers.toObject(), // 直接复用原请求体的结构化数据,适配form-data、x-www-form-urlencoded、raw等所有请求体类型 body: pm.request.body.toJSON() }; pm.sendRequest(request, function(err, res){ if (err) { console.error("旧接口请求失败:", err); return; } console.log("旧接口响应状态码:", res.code); // 此处可添加lodash对比新旧响应的逻辑 // 示例:_.isEqual(res.json(), pm.response.json()) });
额外说明
- 如果你的旧版本接口和当前接口的路径、请求参数有差异,自行调整
url字段的拼接逻辑即可 - 集合级脚本默认会对集合下所有请求生效,如果需要指定部分请求执行对比逻辑,可以加判断条件过滤,比如只对指定接口名的请求执行
pm.sendRequest逻辑 - 对比响应时如果需要忽略指定字段,可以用lodash的
_.omit()方法先剔除不需要对比的字段再做全等判断
内容的提问来源于stack exchange,提问作者user3604037
相关产品推荐
相关产品推荐

