Postman中需先用try/catch解析响应,再用pm.expect校验字段存在且非空,最后安全取值并设环境变量;避免直接链式取值或裸写res.xxx.yyy。

Postman 中用 pm.test 检查响应字段是否存在且非空
Postman 本身不提供“取值前校验”的内置开关,但你完全可以在执行 pm.environment.set 之前,用脚本主动判断字段是否为空(null、undefined、空字符串、空数组等)。否则一旦 json.parse() 失败或字段不存在,后续断言或变量设置直接跳过,还查不出原因。
常见错误现象:ReferenceError: xxx is not defined 或环境变量写入了 undefined,下游请求直接 400;或者 Cannot read property 'xxx' of null。
- 始终先用
pm.response.json()解析,再检查结构,不要直接链式取值(如res.data.user.id) - 对可能缺失的字段,用可选链
?.+ 空值合并??组合判断(Postman v9.15+ 支持 ES2020) - 推荐统一用
pm.expect断言 +pm.test包裹,失败时能直观看到哪一步挂了
const res = pm.response.json();
pm.test("响应中 data 字段存在且非空", () => {
pm.expect(res).to.have.property("data");
pm.expect(res.data).to.not.be.null;
pm.expect(res.data).to.not.be.undefined;
pm.expect(res.data).to.not.be.empty; // 若 data 是对象,此条不适用,改用 Object.keys(res.data).length > 0
});
从 JSON 响应提取字段前做安全取值和空值过滤
关联常用 pm.environment.set("token", res.data.token),但一旦 res.data 是 {} 或 token 字段压根没返回,就会写入 undefined。下游请求带着 undefined 当 token,服务端通常返回 401,但你根本看不出是 Postman 写错了变量。
Postman Mac版是一款专为macOS设计的API开发与测试工具,凭借简洁的界面和强大的功能,深受开发者喜爱。它支持发送各种HTTP请求(GET、POST、PUT等),轻松管理接口集合、环境变量和模拟服务器。Mac用户可享受原生性能、快捷键优化及与系统无缝集成的体验,适用于接口调试、自动化测试和文档生成。无论是个人项目还是团队协作,Postman for Mac都能提升API开发效率,是ma
- 永远不要裸写
res.xxx.yyy—— 先确认路径存在,再取值 - 用
_.get()需提前引入 Lodash(Postman 内置),但更轻量的做法是封装一个安全取值函数 - 空字符串
""、" "、"null"字面量也要纳入检查(后端有时会返回字符串化的空值)
function safeGet(obj, path, defaultValue = null) {
const keys = path.split(".");
let result = obj;
for (const key of keys) {
if (result == null || typeof result !== "object") return defaultValue;
result = result[key];
}
// 过滤常见“伪空”值
if (result === "" || result === " " || result === "null" || result === "undefined") {
return defaultValue;
}
return result ?? defaultValue;
}
const res = pm.response.json();
const token = safeGet(res, "data.token");
if (!token) {
pm.test("❌ token 字段为空或无效,跳过设置", () => {
pm.expect.fail("token 未获取到,不设置环境变量");
});
} else {
pm.environment.set("token", token);
pm.test("✅ token 已成功写入环境变量", () => {});
}
Pre-request Script 里检查上一个接口的变量是否就绪
当多个接口串行依赖(比如登录 → 获取用户信息),常有人把 pm.environment.get("token") 直接塞进 Header,但没验证它是否真有值。结果请求发出去带的是 Bearer undefined,报错信息却只显示 “invalid token”,排查绕一大圈。
- 在 Pre-request Script 中检查关键变量,比在 Tests 里补救更前置、更有效
- 用
pm.variables.get()可同时查 environment / collection / global 变量,但注意优先级顺序 - 检查后直接
throw new Error()可中断当前请求(Postman 不会继续发),避免脏数据污染下游
const token = pm.variables.get("token");
if (!token || typeof token !== "string" || token.trim() === "") {
throw new Error("⛔ Pre-request failed: 'token' is missing or empty. Please run login request first.");
}
// 后续可放心使用
pm.request.headers.add({
key: "Authorization",
value: `Bearer ${token}`
});
为什么不用 pm.response.to.have.property() 直接替代手动判空
pm.response.to.have.property("data") 只能确认字段名存在,不能判断值是否为 null 或 {}。而实际业务中,“字段存在但值为空对象” 和 “字段压根没返回” 对下游的影响几乎一样——都会导致取不到 id、token 等关键子字段。
-
have.property是浅层检查,适合快速确认结构;深层业务逻辑必须手动展开校验 - Postman 的 Chai 断言库默认不开启
deep模式,to.deep.include也解决不了空对象问题 - 真正健壮的关联脚本,一定包含三段:解析 → 结构校验 → 业务值校验(非空、格式、长度等)
最易被忽略的一点:Postman 的 Tests 脚本运行在响应体解析之后,但如果你在 Tests 里才第一次调用 pm.response.json(),而响应体本身不是合法 JSON(比如返回了 HTML 错误页),这行就会直接报 SyntaxError,整个 Tests 块中断——连日志都看不到。所以务必在开头加 try/catch 包裹解析逻辑。
















