Postman 集合测试和自动化

FreeGuideOnline 最新 2026-07-09

javascript // 检查状态码是否为 200 pm.test("状态码是 200", function () { pm.response.to.have.status(200); });

// 检查响应体是否为 JSON 格式 pm.test("响应体是 JSON", function () { pm.response.to.be.json; });

// 检查返回的数据中是否包含至少一个用户 pm.test("用户列表不为空", function () { var jsonData = pm.response.json(); pm.expect(jsonData.length).to.be.above(0); });

// 验证第一个用户的字段结构 pm.test("第一个用户具有 id 和 name 属性", function () { var jsonData = pm.response.json(); pm.expect(jsonData[0]).to.have.property('id'); pm.expect(jsonData[0]).to.have.property('name'); });


### 常用断言方法

- `pm.response.to.have.status(code)`:验证状态码
- `pm.response.to.have.header(key, value)`:验证响应头
- `pm.expect(value).to.be.true/false/null`:布尔/空值判断
- `pm.expect(array).to.be.an('array').that.is.not.empty`:数组非空
- `pm.expect(value).to.have.property('key', 'expectedValue')`:对象属性检查
- `pm.expect(value).to.have.string('substring')`:字符串包含

### 使用 Chai 风格的断言

Postman 内置了 `pm.expect`(基于 Chai 的 BDD 风格),你也可以使用 `chai.assert` 或 `chai.should`,但 `pm.expect` 代码更清晰,推荐使用。

## 使用变量增强测试灵活性

变量让你在不同请求间共享数据,并方便切换不同环境(开发、测试、生产)。

### 集合变量

1. 选中集合,点击 **Variables** 标签。
2. 添加变量名,例如 `baseUrl`,初始值设为 `http://localhost:3000`。
3. 在请求的 URL 中,用双花括号引用变量:`{{baseUrl}}/users`。

### 环境变量和动态变量

- **环境变量**:在右上角环境选择器中创建环境,填入不同环境的值,方便切换。
- **动态变量**:通过 `pm.variables.set("token", responseData.token)` 在脚本中设置,生命周期仅限当前请求或集合运行。

### 在请求之间传递数据

一个典型的场景:先登录获取 Token,再将 Token 用于后续请求。

在“登录”请求的 **Tests** 脚本中:

```javascript
var jsonData = pm.response.json();
pm.environment.set("authToken", jsonData.token);

在后续请求的 Authorization 标签中,选择 Bearer Token,Token 值填写 {{authToken}}。这样运行时就会自动替换。

运行集合与查看结果

使用 Collection Runner

  1. 点击集合名称旁的 Run 按钮(或右键选择 Run collection)。
  2. 在 Collection Runner 界面中:
    • 可以调整请求的执行顺序(拖拽)或取消勾选不需要的请求。
    • 设置迭代次数(需要配合数据文件)。
    • 设置延迟时间,模拟真实网络。
    • 选择是否保留响应记录。
  3. 点击 Run,所有请求按顺序执行。
  4. 执行完毕后会展示总体结果:通过/失败数量、平均响应时间等。点击每个请求可查看详细的请求/响应及测试结果。

测试执行顺序

默认请求顺序就是你在集合中看到的顺序。你也可以在请求的 Pre-request ScriptTests 中使用 pm.execution.setNextRequest("请求名") 来动态控制跳转,实现循环或条件分支。

数据驱动测试

数据驱动让你用外部文件(CSV 或 JSON)提供多组测试数据,每次迭代使用不同数据。

准备数据文件

CSV 示例 (testdata.csv)

username,email
alice,alice@example.com
bob,bob@example.com

JSON 示例 (testdata.json)

[
    { "username": "alice", "email": "alice@example.com" },
    { "username": "bob", "email": "bob@example.com" }
]

在请求中使用数据变量

在请求的 URL、Body 或 Headers 中,使用 {{username}}{{email}} 引用数据列名。

运行数据驱动测试

  1. 打开 Collection Runner,点击 Select File 导入数据文件。
  2. 迭代次数会自动匹配数据行数(也可以手动设置)。
  3. 点击 Run Postman,每次迭代会使用一行数据。响应中的 pm.iterationData 携带当前迭代的数据,可以在测试脚本中用于断言,例如:
pm.test("创建用户成功,用户名匹配", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.username).to.eql(pm.iterationData.get("username"));
});

使用 Newman 实现命令行自动化

Newman 是 Postman 的命令行收集运行工具,可以脱离 GUI 在服务器或 CI 环境中执行测试套件。

安装 Newman

确保已安装 Node.js,然后全局安装 Newman:

npm install -g newman

导出集合与环境

在 Postman 中,右键集合选择 Export,导出为 JSON 文件(例如 UserAPI.postman_collection.json)。同样导出环境文件(可选)。

运行测试

基本命令:

newman run UserAPI.postman_collection.json

指定环境和数据文件:

newman run collection.json \
  -e environment.json \
  -d testdata.csv \
  --iteration-count 2

生成报告

Newman 支持多种报告器,常用的有 CLI、HTML、JUnit 等。

安装 HTML 报告器:

npm install -g newman-reporter-htmlextra

运行并生成报告:

newman run collection.json \
  -r htmlextra \
  --reporter-htmlextra-export report.html

结果报告会包含请求详情、测试结果概览和失败原因。

集成 CI/CD 流水线

将 Newman 命令添加到你的持续集成配置中,实现每次代码提交自动触发 API 测试。

GitHub Actions 示例

在项目根目录创建 .github/workflows/api-tests.yml

name: Run Postman Collection
on: [push, pull_request]
jobs:
  api-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 18
      - name: Install Newman and reporter
        run: |
                    npm install -g newman newman-reporter-htmlextra
      - name: Run tests
        run: |
          newman run ./tests/UserAPI.postman_collection.json \
            -e ./tests/production.postman_environment.json \
            -r cli,htmlextra \
            --reporter-htmlextra-export newman-report.html          
      - name: Upload report artifact
        if: always()
        uses: actions/upload-artifact@v3
        with:
          name: newman-report
          path: newman-report.html

这样每次推送代码时,GitHub Actions 都会在虚拟机中执行你的 Postman 测试,并生成可下载的 HTML 报告。

常见 CI 工具配置

  • Jenkins:在构建步骤中执行 Newman 命令,并利用 publishHTML 插件展示报告。
  • GitLab CI:在 .gitlab-ci.yml 中添加 similar 任务。
  • Azure DevOps:通过命令行任务调用 Newman,并发布测试结果。

进阶技巧与最佳实践

预请求脚本(Pre-request Script)

在请求发送之前执行的脚本,常用于动态生成签名、时间戳或构造请求参数。例如为请求添加当前时间戳:

pm.variables.set("timestamp", Date.now());