直接使用 pm.expect(pm.response.text()).to.include("xxx") 校验响应体是否包含指定字符串,需确保响应为UTF-8文本、注意大小写及隐藏字符,JSON场景优先解析后断言字段值。

怎么用 pm.expect().to.include() 校验响应正文含指定字符串
直接在 Tests 里写 pm.expect(pm.response.text()).to.include("xxx") 就能判断响应体是否包含目标文字,这是最常用、最轻量的文本存在性断言。
- 必须确保接口返回的是可读文本(如 HTML、JSON 字符串、纯文本),不能是二进制或压缩内容(比如
Content-Encoding: gzip会导致pm.response.text()解析失败或乱码) - 大小写敏感:断言
"Success"不会通过"success",需要严格匹配 - 如果响应是 JSON,但你想查的是字段值里的子串(比如
{"msg": "操作成功"}中的“成功”),这个方法依然有效;但更推荐用 JSON 解析后精准取值,避免误匹配 - 别把空格、换行、BOM 字符漏掉——复制响应时建议从 Postman 的
Raw标签复制,而不是Preview或浏览器渲染结果
为什么 pm.response.to.have.body() 不适合做“包含”校验
pm.response.to.have.body("xxx") 是全等匹配,要求整个响应体字符串和给定值完全一致,一个字符都不能多也不能少。它不是“包含”,而是“等于”。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- 常见误用:把
"登录成功"填进have.body(),但实际响应是{"code":0,"msg":"登录成功"}→ 断言必 fail - 仅适用于极少数场景:比如接口明确约定只返回固定纯文本(如
OK、pong),且无额外换行或空格 - 一旦响应中带时间戳、随机 ID、token 等动态字段,
have.body()几乎不可用
JSON 响应里想查字段值是否含某文字,该用哪个方法
先用 pm.response.json() 解析,再对具体字段调用 .includes() 或正则,比直接查原始文本更可靠。
- 错误写法:
pm.expect(pm.response.text()).to.include("error")——可能误命中注释、字段名、嵌套结构里的无关error - 推荐写法:
const data = pm.response.json(); pm.expect(data.msg).to.include("成功"); - 如果字段可能为空或不存在,加保护:
pm.expect(data?.msg || "").to.include("成功") - 需要模糊匹配(如“超时”或“timeout”)时,用正则:
pm.expect(data.msg).to.match(/超时|timeout/i)
容易被忽略的编码与空格问题
Postman 默认按 UTF-8 解析响应体,但某些后端可能不带 charset=utf-8 声明,或返回 BOM 头,导致 pm.response.text() 返回带隐藏字符的字符串。
- 现象:明明肉眼看到“用户不存在”,断言却 fail;打印
pm.response.text().length发现比预期多 1–3 个字符 - 快速验证:在 Tests 里加一行
console.log(JSON.stringify(pm.response.text())),看引号内是否有\ufeff(BOM)或不可见控制字符 - 临时绕过:用正则清理再断言:
pm.expect(pm.response.text().replace(/^\uFEFF/, "")).to.include("用户不存在") - 长期解法:让后端响应头带上
Content-Type: application/json; charset=utf-8

















