Ubuntu下Postman响应数据解析与提取
在 Ubuntu 中,Postman 的响应解析与提取依赖 Tests 与 Pre-request Script 中的 JavaScript 脚本。常用入口包括:解析 JSON 响应体、从 Headers/Cookies 取值、正则提取文本或 HTML、将值保存为变量供后续请求使用,以及批量运行与持续集成。Postman 的测试脚本本质为 JavaScript,通过 pm 对象完成断言与数据存取。
JSON解析与数据提取
// 解析JSON
const json = pm.response.json();
// 示例:断言与提取
pm.test("状态码为200", () => pm.response.to.have.status(200));
pm.test("业务码正确", () => pm.expect(json.code).to.eql(0));
// 提取值到变量(后续请求可用 {{token}})
pm.globals.set("token", json.data.token);
pm.environment.set("userId", json.data.user.id);
上述方式适用于大多数 REST API 的 JSON 响应解析、字段提取与变量保存。非JSON响应处理
const text = pm.response.text();
pm.globals.set("rawText", text);
// 简单示例:正则提取
const m = text.match(/token=([A-Za-z0-9\-_]+)/);
if (m) pm.globals.set("tokenFromText", m[1]);
const xmlStr = pm.response.text();
const doc = new DOMParser().parseFromString(xmlStr, "text/xml");
const province = doc.getElementsByTagName("province")[0]?.textContent;
if (province) pm.globals.set("province", province);
const html = pm.response.text();
const csrf = (html.match(/name="csrf-token" content="([^"]+)"/) || [])[1];
if (csrf) pm.globals.set("csrfToken", csrf);
以上方法覆盖 text/xml/html 等常见非 JSON 场景的解析与提取。
从Headers Cookies与请求体取值
// 响应头
const ct = pm.response.headers.get("Content-Type");
pm.globals.set("contentType", ct);
// 响应Cookie(Postman v7+ 推荐)
const sess = pm.cookies.get("sessionid");
if (sess) pm.globals.set("sessionid", sess);
// 请求方法、协议、端口
const method = pm.request.method;
const protocol = pm.request.url.protocol; // http/https
const port = pm.request.url.port;
// 请求体(raw JSON 场景)
const bodyRaw = pm.request.body.raw;
if (bodyRaw) {
const bodyObj = JSON.parse(bodyRaw);
const outTradeNo = bodyObj.out_trade_no;
pm.globals.set("outTradeNo", outTradeNo);
}
以上示例展示了如何通过 pm.request 与 pm.cookies 读取请求与响应的关键信息。
数组遍历与条件存储及自动化
const json = pm.response.json();
const users = json?.data?.users;
if (Array.isArray(users)) {
for (const u of users) {
if (u.isRetail === true) {
// 多个匹配会覆盖;如需保留多个,改为数组或不同变量名
pm.globals.set("UserId", u.id);
} else if (u.isRetail === false) {
pm.globals.set("orgUserId", u.id);
}
}
} else {
console.warn("users 不是数组或不存在");
}