关键要点
- 全面的测试平台:Postman 提供从手动探索性测试到完全自动化测试套件的 端到端 API 测试解决方案,为开发者和 QA 团队提供统一、直观的界面。
- 大规模测试自动化:带有基于 JavaScript 的测试脚本的集合支持 强大的自动化——验证响应模式、断言业务逻辑、使用动态数据链接请求,并使用单个命令运行数千个测试。
- 通过 Newman 的 CI/CD 集成:Newman CLI 将 Postman 集合转换为可用于持续集成管道的可执行测试,在每次代码提交时提供对 API 质量的快速反馈并防止回归。
- 团队协作乘数:共享工作区、版本控制的集合和内置文档功能使 Postman 成为 协作中心,其中 API 契约、测试套件和知识被集中化并对整个团队可访问。
什么是用于 API 测试的 Postman?
Postman 是世界领先的 API 平台,被全球开发者和组织广泛使用。虽然它最初只是一个用于手动发送 HTTP 请求的简单工具,但它已经发展成为整个 API 生命周期的综合生态系统——设计、开发、测试、文档和监控。
具体来说,对于 API 测试,Postman 提供了几个关键能力:
- 手动测试和探索:用于制作请求、检查响应和在开发期间快速迭代 API 调用的直观 GUI。
- 自动化测试:用于编写断言、验证响应和创建可重复测试套件的基于 JavaScript 的测试框架。
- 测试组织:将相关请求分组到具有共享配置的逻辑测试套件的集合。
- 持续测试:Newman,一个在 CI/CD 管道中执行 Postman 集合的命令行运行器。
- 团队协作:用于团队范围内 API 知识的共享工作区、版本控制和文档生成。
使 Postman 在测试方面特别强大的是其 双重性质:它足够易于访问,非程序员可以通过其 GUI 创建测试,但又足够复杂,工程师可以编写复杂的、程序化的测试逻辑。这种多功能性使其成为手动 QA 工作流和完全自动化测试实践之间的桥梁。
1flowchart TD
2 subgraph Development["开发阶段"]
3 A[开发者] -->|创建/测试| B[Postman GUI]
4 B -->|手动请求| C[被测 API]
5 B -->|添加测试脚本| D[测试集合]
6 end
7
8 subgraph Automation["自动化阶段"]
9 D -->|导出| E[Newman CLI]
10 E -->|执行测试| C
11 E -->|生成报告| F[测试结果]
12 end
13
14 subgraph CI_CD["CI/CD 管道"]
15 G[代码提交] --> H[构建和部署]
16 H --> I[运行 Newman 测试]
17 I -->|通过/失败| J{测试通过?}
18 J -->|是| K[部署到预发布]
19 J -->|否| L[阻止部署并警告]
20 end
21
22 D -.->|与团队共享| M[团队工作区]
23 M -.->|协作| A
24
25 style B fill:#e3f2fd,stroke:#1976d2
26 style E fill:#fff3e0,stroke:#f57c00
27 style I fill:#f3e5f5,stroke:#7b1fa2
28 style K fill:#e8f5e9,stroke:#388e3c
29 style L fill:#ffebee,stroke:#d32f2f为什么 Postman 对现代 API 测试至关重要
Postman 在测试策略中的价值主张根植于解决真实开发和质量保证挑战的具体好处。
1. 快速开发和调试工作流
Postman 最直接的好处是 迭代速度。在积极开发期间,开发者需要使用各种输入快速测试 API 端点、检查响应和调试问题。Postman 的 GUI 使这一切变得无摩擦:
- 零设置:无需编写代码或配置工具——打开 Postman,创建请求,然后点击发送。
- 智能建议:请求头的自动完成、认证助手和响应可视化(格式化的 JSON、语法高亮)。
- 历史记录和可重用性:自动请求历史记录意味着你永远不会丢失你的工作,并且可以立即重新运行以前的请求。
这种速度优势是可以量化的。使用 curl 命令或自定义脚本可能需要 5-10 分钟设置的内容在 Postman 中只需几秒钟。对于每天进行数百次 API 调用的团队来说,这转化为节省数小时的时间。
2. 降低测试自动化的门槛
传统的测试自动化需要编写代码、设置测试框架和管理依赖项——不是团队中每个人都具备的技能。Postman 使测试自动化民主化 通过提供:
- 无代码测试创建:使用 JavaScript 代码片段编写测试,无需设置 Node.js 项目。
- 预构建的测试代码片段:常见断言(状态码检查、模式验证)可作为点击式代码片段使用。
- 可视化测试结果:测试结果立即在 GUI 中显示,带有清晰的通过/失败指示器。
这种可访问性意味着 QA 工程师、产品经理甚至技术作家都可以为测试套件做出贡献,显著扩大测试覆盖范围。
3. 从手动测试到自动化测试无摩擦
Postman 的独特优势之一是从手动测试到自动化的 无缝过渡。工作流程是:
- 手动探索:交互式创建请求并验证 API 行为。
- 添加断言:编写将手动验证编码的测试脚本。
- 分组到集合:将相关测试组织成逻辑套件。
- 使用 Newman 自动化:使用一个命令在 CI/CD 中运行整个集合。
这种进展尊重自然的开发过程——你不会预先承诺构建自动化基础设施。你从手动开始,当 API 稳定时,你将这些知识形式化为自动化测试 使用相同的工具和相同的请求。
4. 集中的 API 知识和团队协作
API 是团队(前端、后端、QA、DevOps)之间的 共享接口,但关于它们如何工作的知识通常是分散的。Postman 通过充当 单一事实来源 来解决这个问题:
- 共享工作区:团队看到相同的集合、请求和测试结果。
- 版本控制:随时间跟踪集合的变更,恢复到以前的版本,并了解谁改变了什么。
- 文档生成:Postman 自动从你的集合生成漂亮的交互式文档,使文档与测试保持同步。
这种集中化减少了新团队成员的入职时间,防止重复工作(一个人测试另一个人已经验证的内容),并创建在团队流动中幸存的机构知识。
如何使用 Postman 进行有效的 API 测试:分步指南
掌握 Postman 进行测试涉及理解其分层能力——从基本请求到复杂的自动化测试套件。
步骤 1:创建你的第一个测试请求
首先手动测试单个 API 端点。
示例:测试用户认证 API
创建新请求:
- 点击"新建"→"HTTP 请求"
- 将方法设置为
POST - 输入 URL:
https://api.example.com/auth/login
配置请求体:
1{ 2 "username": "testuser", 3 "password": "SecurePass123!" 4}添加请求头:
1Content-Type: application/json发送请求:点击"发送"并检查响应。
预期响应:
1{
2 "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
3 "expires_in": 3600,
4 "user_id": "12345"
5}步骤 2:添加测试脚本进行验证
现在,通过添加断言将此手动测试转换为自动化测试。
点击请求中的"测试"选项卡并添加 JavaScript 测试脚本:
1// 测试 1:验证成功响应
2pm.test("Login returns 200 OK", function () {
3 pm.response.to.have.status(200);
4});
5
6// 测试 2:验证响应时间可接受
7pm.test("Response time is less than 500ms", function () {
8 pm.expect(pm.response.responseTime).to.be.below(500);
9});
10
11// 测试 3:验证响应结构
12pm.test("Response has required fields", function () {
13 const jsonData = pm.response.json();
14 pm.expect(jsonData).to.have.property('token');
15 pm.expect(jsonData).to.have.property('expires_in');
16 pm.expect(jsonData).to.have.property('user_id');
17});
18
19// 测试 4:验证令牌格式(JWT)
20pm.test("Token is a valid JWT format", function () {
21 const jsonData = pm.response.json();
22 const jwtPattern = /^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/;
23 pm.expect(jsonData.token).to.match(jwtPattern);
24});
25
26// 测试 5:存储令牌以在后续请求中使用
27pm.test("Save token to environment", function () {
28 const jsonData = pm.response.json();
29 pm.environment.set("auth_token", jsonData.token);
30});当你点击"发送"时,Postman 执行这些测试并显示带有通过/失败指示器的结果。
步骤 3:构建完整的测试集合
单个请求很有用,但真实 API 有多个交互的端点。集合 允许你对相关测试进行分组并按顺序执行它们。
示例:电子商务 API 测试套件
创建一个名为"E-Commerce API Tests"的集合,其中包含以下请求:
认证
- POST
/auth/login(存储令牌) - POST
/auth/logout
- POST
产品目录
- GET
/products(列出所有产品) - GET
/products/:id(获取特定产品) - POST
/products(管理员:创建产品)
- GET
购物车
- POST
/cart/add(需要认证令牌) - GET
/cart(查看购物车) - DELETE
/cart/items/:id(删除商品)
- POST
结账
- POST
/checkout(完成购买)
- POST
关键模式:使用变量的请求链
每个请求都可以提取数据并将其传递给后续请求:
1// 在"登录"请求测试选项卡中:
2const token = pm.response.json().token;
3pm.environment.set("auth_token", token);
4
5// 在"获取产品"请求测试选项卡中:
6const productId = pm.response.json().products[0].id;
7pm.environment.set("product_id", productId);
8
9// 在"添加到购物车"请求中:
10// 在授权请求头中使用 {{auth_token}}
11// 在请求体中使用 {{product_id}}这创建了一个真实的 端到端测试流程,模拟实际的用户行为。
步骤 4:为多个测试阶段使用环境
API 通常存在于多个环境中(开发、预发布、生产)。Postman 中的 环境 允许你在它们之间切换而无需更改请求。
创建环境:
开发环境:
1{
2 "base_url": "https://dev-api.example.com",
3 "auth_token": ""
4}预发布环境:
1{
2 "base_url": "https://staging-api.example.com",
3 "auth_token": ""
4}生产环境:
1{
2 "base_url": "https://api.example.com",
3 "auth_token": ""
4}在请求中:使用变量:
1{{base_url}}/products现在,针对预发布或生产运行整个测试集合只需下拉菜单更改——无需修改请求。
步骤 5:使用预请求脚本的高级测试
预请求脚本 在发送请求之前运行,实现动态数据生成和设置。
示例:动态测试数据生成
1// 预请求脚本:生成唯一的用户数据
2const randomEmail = `test.user.${Date.now()}@example.com`;
3const randomUsername = `user_${Math.random().toString(36).substr(2, 9)}`;
4
5pm.environment.set("random_email", randomEmail);
6pm.environment.set("random_username", randomUsername);
7
8// 在请求体中使用:
9// {
10// "email": "{{random_email}}",
11// "username": "{{random_username}}"
12// }示例:计算 HMAC 签名
一些 API 需要请求签名进行认证:
1// 预请求脚本:生成 HMAC 签名
2const crypto = require('crypto-js');
3const timestamp = Date.now().toString();
4const apiKey = pm.environment.get("api_key");
5const apiSecret = pm.environment.get("api_secret");
6
7const message = `${timestamp}${pm.request.method}${pm.request.url.getPath()}`;
8const signature = crypto.HmacSHA256(message, apiSecret).toString();
9
10pm.environment.set("timestamp", timestamp);
11pm.environment.set("signature", signature);
12
13// 在请求头中使用:
14// X-API-KEY: {{api_key}}
15// X-Timestamp: {{timestamp}}
16// X-Signature: {{signature}}步骤 6:使用 JSON Schema 进行模式验证
对于复杂的 API,验证响应的确切结构至关重要。Postman 支持 JSON Schema 验证。
1// 测试:根据模式验证响应
2pm.test("Response matches expected schema", function () {
3 const schema = {
4 "type": "object",
5 "required": ["id", "name", "price", "in_stock"],
6 "properties": {
7 "id": { "type": "string" },
8 "name": { "type": "string" },
9 "price": { "type": "number", "minimum": 0 },
10 "in_stock": { "type": "boolean" },
11 "categories": {
12 "type": "array",
13 "items": { "type": "string" }
14 }
15 }
16 };
17
18 pm.response.to.have.jsonSchema(schema);
19});这确保即使 API 演变,契约仍然稳定。
步骤 7:使用集合运行器运行集合
集合运行器 按顺序执行集合中的所有请求,提供全面的测试报告。
如何使用:
- 在 Postman 中点击"运行器"
- 选择你的集合
- 选择环境
- 设置迭代(多次运行整个集合)
- 点击"运行"
Postman 显示:
- 执行的总请求数
- 通过/失败的测试
- 响应时间
- 每个请求的详细日志
这非常适合发布前的 手动回归测试。
1flowchart LR
2 A[集合运行器] --> B[执行请求 1<br/>POST /auth/login]
3 B --> C{测试通过?}
4 C -->|是| D[执行请求 2<br/>GET /products]
5 C -->|否| E[停止并报告失败]
6
7 D --> F{测试通过?}
8 F -->|是| G[执行请求 3<br/>POST /cart/add]
9 F -->|否| E
10
11 G --> H{测试通过?}
12 H -->|是| I[执行请求 4<br/>POST /checkout]
13 H -->|否| E
14
15 I --> J{测试通过?}
16 J -->|是| K[所有测试通过 ✓]
17 J -->|否| E
18
19 K --> L[生成报告]
20 E --> L
21
22 style K fill:#e8f5e9,stroke:#388e3c
23 style E fill:#ffebee,stroke:#d32f2f在 CI/CD 中使用 Newman 自动化 Postman 测试
当你使用 Newman(Postman 的命令行集合运行器)将 Postman 测试集成到 CI/CD 管道 中时,才能实现其真正的威力。
安装和运行 Newman
1# 全局安装 Newman
2npm install -g newman
3
4# 运行集合
5newman run MyCollection.json
6
7# 使用环境运行
8newman run MyCollection.json -e Production.json
9
10# 生成 HTML 报告
11npm install -g newman-reporter-htmlextra
12newman run MyCollection.json -r htmlextra --reporter-htmlextra-export report.html
将 Newman 集成到 CI/CD 管道
示例:GitHub Actions
1name: API Tests
2on: [push, pull_request]
3jobs:
4 test:
5 runs-on: ubuntu-latest
6 steps:
7 - uses: actions/checkout@v2
8
9 - name: Install Newman
10 run: npm install -g newman newman-reporter-htmlextra
11
12 - name: Run Postman Collection
13 run: |
14 newman run postman/API-Tests.json \
15 -e postman/Staging-Environment.json \
16 -r htmlextra \
17 --reporter-htmlextra-export test-report.html \
18 --bail
19
20 - name: Upload Test Report
21 if: always()
22 uses: actions/upload-artifact@v2
23 with:
24 name: test-report
25 path: test-report.html示例:Jenkins 管道
1pipeline {
2 agent any
3 stages {
4 stage('API Tests') {
5 steps {
6 sh 'npm install -g newman'
7 sh 'newman run postman/API-Tests.json -e postman/Production.json --reporters cli,junit --reporter-junit-export results.xml'
8 }
9 }
10 }
11 post {
12 always {
13 junit 'results.xml'
14 }
15 }
16}有了管道中的 Newman,每次代码提交都会触发你完整的 API 测试套件,提供关于更改是否破坏了 API 契约的 即时反馈。
高级 Postman 测试技术
1. 使用 CSV/JSON 文件进行数据驱动测试
使用多个数据集运行相同的测试:
1username,password,expected_status
2validuser,ValidPass123!,200
3invaliduser,wrongpass,401
4"",ValidPass123!,400
5validuser,"",4001newman run Login-Tests.json --iteration-data test-data.csvPostman 遍历每一行,使用不同的输入运行测试。
2. 使用 API 网关进行测试
对于使用像 Apache APISIX 这样的 API 网关 的团队,Postman 测试应验证:
- 网关级功能:速率限制、认证、请求/响应转换
- 路由逻辑:验证请求被路由到正确的上游服务
- 错误处理:测试网关错误响应(上游故障时的 503)
示例:测试 APISIX 速率限制
1// 预请求:生成突发请求
2const baseUrl = pm.environment.get("base_url");
3const authHeader = {
4 'Authorization': 'Bearer ' + pm.environment.get("auth_token")
5};
6const totalRequests = 5; // 根据速率限制配置调整
7
8for (let i = 0; i < totalRequests; i++) {
9 pm.sendRequest({
10 url: baseUrl + "/api/products",
11 method: 'GET',
12 header: authHeader
13 }, function (err, res) {
14 if (err) {
15 console.log("Pre-request error:", err);
16 }
17 // 每个请求都有助于达到速率限制。
18 });
19}
20
21// 主请求:这应该触及速率限制(取决于你的网关设置)
22pm.test("Rate limit returns 429", function () {
23 // 在预请求中发送多个快速请求后
24 // 当超过限制时,此请求预期会被限制
25 pm.response.to.have.status(429);
26});
27
28pm.test("Rate limit header is present", function () {
29 pm.response.to.have.header("X-RateLimit-Limit");
30});3. 使用 Postman Monitors 监控 API
Postman Monitors 按计划(例如,每小时)运行集合以持续验证 API 健康状况。
设置:
- 选择集合 → 点击"监控"
- 选择频率和环境
- 配置通知(失败时发送电子邮件/Slack)
这提供了对生产 API 的 持续自动化测试,立即警告你问题。
结语
Postman 已从简单的 HTTP 客户端演变为 全面的 API 测试平台,弥合了手动探索和完全自动化测试之间的差距。它的力量在于其多功能性——它对非开发者是可访问的,但对复杂的测试场景又足够复杂,使其成为所有规模和技能级别团队的宝贵工具。
通过掌握 Postman 的核心能力——创建请求、编写测试脚本、组织集合、利用环境和使用 Newman 自动化——团队可以构建强大、可维护的测试套件,在开发的每个阶段提供对 API 质量的信心。从 GUI 中的手动测试到 CI/CD 管道中的自动化执行的无缝过渡意味着你永远不会超越该工具;它随着你的测试成熟度而扩展。
对于构建 API 驱动应用程序的组织,特别是那些使用像 Apache APISIX 这样的 API 网关 进行集中控制的组织,Postman 测试应该是质量策略的基石。与用于集成验证的契约测试和用于性能保证的负载测试相结合,Postman 提供了功能测试层,确保你的 API 正确工作、对错误做出适当响应并随时间维护其契约。
下一步
请继续关注我们即将推出的 API 101 专栏,你将在其中找到最新的更新和见解!
渴望深化你对 API 网关的了解?关注我们的 Linkedin,获取直接发送到你收件箱的宝贵见解!
如果你有任何问题或需要进一步的帮助,请随时联系 API7 专家。
