温馨提示×

Ubuntu Postman如何调试脚本

小樊
67
2025-11-18 13:22:04
栏目: 智能运维

Ubuntu下Postman脚本调试指南

一 基础调试手段

  • 打开控制台:在顶部菜单选择View → Show Postman Console,或使用快捷键Ctrl+Alt+C。所有脚本中的console.log与错误堆栈都会在这里显示,便于定位问题。
  • 打印日志:在Pre-request ScriptTests中使用**console.log(“变量值:”, value)**输出关键变量与执行流程。
  • 运行与查看结果:点击Send发送请求,在响应面板切换到Tests查看断言结果;脚本报错会在控制台给出行号与错误原因。
  • 小技巧:在集合或请求上右键选择Run进行批量执行,可快速复现脚本问题。

二 断点与逐步执行

  • 内置断点:在脚本编辑器的行号左侧单击即可设置/取消断点,配合单步执行观察变量变化与调用栈。
  • 使用debugger语句:在代码中插入debugger;,脚本执行到该行会暂停,便于检查当前上下文。
  • 结合控制台:暂停后可在控制台查看当前作用域变量、响应对象与请求信息,逐步排查逻辑问题。

三 常见错误与快速排查

  • 变量未定义或为空:读取环境变量/全局变量前先判空,例如:
    • const token = pm.environment.get(“token”) || “”;
  • 响应体解析错误:解析前先确保内容类型与结构正确,例如:
    • let json; try { json = pm.response.json(); } catch (e) { console.error(“JSON解析失败”, e); }
  • 异步请求处理:使用pm.sendRequest的回调或async/await处理异步流程,避免时序问题。
  • 作用域与时机:在Pre-request Script中只能影响即将发送的请求;在Tests中可访问pm.response
  • 善用断言:用pm.testpm.expect尽早暴露问题,例如:
    • pm.test(“状态码为200”, () => pm.response.to.have.status(200));
    • pm.test(“响应时间小于200ms”, () => pm.expect(pm.response.responseTime).to.be.below(200));
  • 批量回归:使用Collection RunnerNewman做回归,稳定复现间歇性脚本问题。

四 实用脚本模板

  • 登录并保存Token到环境

    // Pre-request Script 或 Tests
    const loginUrl = pm.environment.get("apiBaseUrl") + "/login";
    const payload = {
      email: `user${Math.floor(Math.random()*1000)}@example.com`,
      password: "password123"
    };
    
    pm.sendRequest({
      url: loginUrl,
      method: "POST",
      header: { "Content-Type": "application/json" },
      body: JSON.stringify(payload)
    }, (err, res) => {
      if (err) {
        console.error("登录请求失败", err);
        return;
      }
      try {
        const json = res.json();
        pm.expect(res.code).to.equal(200);
        pm.environment.set("authToken", json.token);
        console.log("已保存 authToken:", json.token);
      } catch (e) {
        console.error("解析登录响应失败", e);
      }
    });
    
  • 带认证的请求与响应校验

    // Tests
    pm.test("状态码为200", () => pm.response.to.have.status(200));
    pm.test("Content-Type为application/json", () => {
      pm.response.to.have.header("Content-Type", /application\/json/);
    });
    
    let json;
    try {
      json = pm.response.json();
    } catch (e) {
      pm.test("响应体是合法JSON", () => { throw e; });
      return;
    }
    
    pm.test("包含userId字段", () => pm.expect(json).to.have.property("userId"));
    if (json.userId) {
      pm.collectionVariables.set("userId", json.userId);
      console.log("已设置 collectionVariables.userId:", json.userId);
    }
    
  • 集合批量运行与CI

    • 导出集合与环境为JSON后,在终端执行:
      • newman run /path/to/collection.json -e /path/to/env.json
    • 将命令集成到GitHub Actions等CI流程,实现自动化回归。

0