温馨提示×

Ubuntu Postman如何生成自动化脚本

小樊
34
2025-12-02 10:25:59
栏目: 智能运维

Ubuntu 下 Postman 自动化脚本生成与落地

一 核心概念与脚本类型

  • 在 Postman 中,自动化脚本主要写在两个位置:
    • Pre-request Script:在请求发送前执行,常用于设置环境变量请求头查询参数、生成动态数据等。
    • Tests:在收到响应后执行,用于断言状态码响应头/响应体响应时间、提取并保存token等。
  • 脚本运行环境提供 pm 对象与 Chai.js 断言风格,可直接使用如 pm.testpm.expect 等 API。
  • 调试建议使用 Postman 控制台输出 console.log,便于定位脚本问题。

二 在 Postman 内快速生成脚本

  • 新建或打开请求,切换到 Pre-request ScriptTests 标签,按需编写 JavaScript
  • 常用片段(可直接粘贴改造):
    • 预请求脚本:设置 Authorization
      // Pre-request Script
      const token = pm.environment.get("token");
      pm.request.headers.add({ key: "Authorization", value: "Bearer " + token });
      
    • 测试脚本:状态码与响应时间断言
      // Tests
      pm.test("Status code is 200", () => pm.response.to.have.status(200));
      pm.test("Response time < 200ms", () => pm.expect(pm.response.responseTime).to.be.below(200));
      
    • 测试脚本:解析 JSON 并断言字段
      // Tests
      const jsonData = pm.response.json();
      pm.test("User ID present", () => pm.expect(jsonData.id).to.be.a("number"));
      
  • 运行与调试:点击 Send 执行,查看 Test Results;打开 Console 查看 console.log 输出。

三 数据驱动与动态值

  • 变量体系:合理使用 Environment/Global/Collection/Data 变量,脚本中用 pm.environment.get/setpm.variables.get/set 读写,便于环境切换与数据传递。
  • 数据文件驱动:在 Collection RunnerNewman 中使用 CSV/JSON 数据文件,实现批量参数化运行。
  • 动态值:在请求参数中可直接使用 Postman 动态变量,如 {{$guid}}{{$timestamp}},适合构造唯一标识与时间戳。

四 命令行自动化与 CI 集成

  • 安装 Newman(Postman 命令行工具):
    npm install -g newman
    
  • 导出资产:在 Postman 中将 Collection 导出为 collection.json,将 Environment 导出为 environment.json
  • 本地运行示例:
    newman run collection.json --environment environment.json
    
  • Jenkins/GitHub Actions/GitLab CI 中执行 Newman,实现接口自动化回归与报告归档(Newman 支持多种 reporters,可按需配置)。

五 实战模板 注册登录并串联请求

  • 目标:注册用户 → 登录获取 token → 调用受保护接口,全部用脚本串联与断言。
  • 建议将 apiBaseUrl 配置到环境变量中。
  • 示例脚本(可放入对应请求的 Tests 或同级作用域):
    // 注册:生成随机邮箱并注册
    pm.test("Register user", () => {
        const email = `user${Math.floor(Math.random()*10000)}@example.com`;
        const password = "password123";
        pm.sendRequest({
            url: pm.environment.get("apiBaseUrl") + "/register",
            method: "POST",
            body: JSON.stringify({ email, password }),
            headers: { "Content-Type": "application/json" }
        }, (err, res) => {
            pm.expect(res.status).to.eql(200);
            pm.expect(res.json().email).to.eql(email);
        });
    });
    
    // 登录:获取 token 并写入环境变量
    pm.test("Login and set authToken", () => {
        const email = pm.environment.get("lastRegisteredEmail") || `user${Math.floor(Math.random()*10000)}@example.com`;
        const password = "password123";
        pm.sendRequest({
            url: pm.environment.get("apiBaseUrl") + "/login",
            method: "POST",
            body: JSON.stringify({ email, password }),
            headers: { "Content-Type": "application/json" }
        }, (err, res) => {
            pm.expect(res.status).to.eql(200);
            const token = res.json().token;
            pm.expect(token).to.be.a("string").and.not.empty;
            pm.environment.set("authToken", token);
        });
    });
    
    // 获取用户信息:使用 token 访问受保护接口
    pm.test("Get user info", () => {
        const token = pm.environment.get("authToken");
        pm.sendRequest({
            url: pm.environment.get("apiBaseUrl") + "/user",
            method: "GET",
            headers: { "Authorization": `Bearer ${token}` }
        }, (err, res) => {
            pm.expect(res.status).to.eql(200);
            pm.expect(res.json()).to.have.property("email");
        });
    });
    
  • 说明:上述示例展示了在脚本中使用 pm.sendRequest 进行流程串联、在 pm.test 中做断言、用 pm.environment.set 跨请求共享数据;也可将注册/登录抽成 Collection 前置脚本,供多条用例复用。

0