温馨提示×

Ubuntu下Postman的响应数据如何解析

小樊
45
2025-12-08 07:40:37
栏目: 智能运维

Ubuntu下Postman响应数据解析与提取

Ubuntu 中,Postman 的响应解析与提取依赖 TestsPre-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]);
    
  • XML 响应:使用浏览器内置 DOMParser 解析并取值。
    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);
    
  • HTML 页面:可用 正则表达式 抽取隐藏字段或令牌(如 CSRF)。
    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与请求体取值

  • 响应头与 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);
    
  • 请求头、方法与请求体(在 Pre-request 或 Tests 中均可读取):
    // 请求方法、协议、端口
    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.requestpm.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 不是数组或不存在");
    }
    
  • 批量运行与持续集成:将请求保存为 Collection,使用 Collection Runner 批量执行,或用 Newman 在命令行/CI 中运行并生成报告,便于回归与自动化。

0