1. 引言
要全面测试一个 Web API,我们需要一个能够访问其接口的客户端工具。Postman 是一款独立的工具,可以从服务外部发起 HTTP 请求来调用 Web API。
使用 Postman 时,我们无需为了测试而编写任何 HTTP 客户端代码。相反,我们可以创建测试套件(称为 Collections),然后让 Postman 来与我们的 API 进行交互。
在本教程中,我们将学习如何创建一个 Postman Collection 来测试一个 REST API。
2. 环境准备
2.1. 安装 Postman
Postman 支持 Linux、Mac 和 Windows 平台。可以从 Postman 官网 下载并安装。
启动后关闭欢迎界面,可以看到如下界面:
2.2. 启动服务端
Postman 需要一个运行中的 HTTP 服务器来处理请求。本教程中我们使用一个 Baeldung 的示例项目 spring-boot-rest,项目地址:GitHub。
顾名思义,这是一个 Spring Boot 应用。我们使用 Maven 命令 mvn install
构建项目,然后使用 mvn spring-boot:run
启动服务。
确认服务是否启动成功,可以在浏览器中访问以下地址:
http://localhost:8082/spring-boot-rest/auth/foos
该服务使用的是内存数据库,服务停止后数据会被清空。
3. 创建 Postman Collection
在 Postman 中,Collection 是一系列 HTTP 请求的集合。Postman 会保存请求的所有细节,包括请求头和请求体。因此,我们可以按顺序运行这些请求,实现半自动化的测试。
我们从创建一个新的 Collection 开始。点击 New 按钮旁的下拉箭头,选择 Collection:
在弹出的 CREATE A NEW COLLECTION 对话框中,我们将 Collection 命名为 “foo API test”,然后点击 Create 按钮。创建完成后,左侧会显示新创建的 Collection:
创建后,将鼠标悬停在 Collection 上,会出现两个菜单按钮。箭头按钮可以打开右侧面板,进入 Collection Runner;省略号按钮则可以打开更多操作菜单。
4. 添加一个 POST 请求
4.1. 创建新请求
现在我们有了一个空的 Collection,接下来添加一个请求。我们要向 URI /auth/foos
发送一个 POST 请求。点击 Collection 的省略号菜单,选择 Add Request。
在弹出的 SAVE REQUEST 对话框中,为请求命名,例如 “add a foo”,然后点击 Save to foo API test。
创建完成后,Collection 会显示包含一个请求。如果没有展开 Collection,需要点击它来查看请求。
此时,默认请求方法是 GET,我们需要在下一节进行修改:
4.2. 编辑请求
点击请求即可在请求编辑器中打开:
我们只需要关注几个关键设置:
✅ 将请求方法从 GET 改为 POST
✅ 在 URL 输入框中填入:
http://localhost:8082/spring-boot-rest/auth/foos
✅ 点击 Body 标签页,选择 raw 单选框,然后从右侧下拉菜单中选择 *JSON (application/json)*,输入如下 JSON 数据:
{
"name": "Transformers"
}
最后,使用 Ctrl-S 或点击 Save 按钮保存修改。保存后,左侧列表中的请求方法会更新为 POST:
5. 执行请求
5.1. 执行单个请求
点击请求编辑器右侧的 Send 按钮即可发送请求。发送后,响应面板会自动打开,可能需要滚动查看:
我们可以看到:
✅ 状态码为 201 Created,表示请求成功
✅ 响应体中返回了 id: 1
,说明数据已成功插入
5.2. 使用 Collection Runner
与单个请求不同,Collection Runner 可以执行整个 Collection。将鼠标悬停在 Collection 上,点击右侧箭头,然后点击 Run 按钮:
点击后会打开 Collection Runner 窗口,点击底部的 Run foo API test 按钮开始执行:
执行完成后,会显示测试结果。由于我们还没有添加测试脚本,结果显示为 0 通过,0 失败:
6. 测试响应内容
6.1. 为请求添加测试
回到请求编辑器,点击 Tests 标签页,编写如下 JavaScript 测试脚本:
pm.test("success status", () => pm.response.to.be.success );
pm.test("name is correct", () =>
pm.expect(pm.response.json().name).to.equal("Transformers"));
pm.test("id was assigned", () =>
pm.expect(pm.response.json().id).to.be.not.null );
这些脚本使用了 Postman 提供的全局对象 pm
,包括:
✅ pm.test()
:定义测试用例
✅ pm.expect()
:断言条件
✅ pm.response
:获取响应内容
最后,保存修改。
6.2. 执行测试
再次点击 Send 按钮,测试结果会显示在 Test Results 标签页中:
在 Collection Runner 中也会显示测试结果:
6.3. 使用 Postman Console
Postman Console 是一个调试脚本的强大工具。可以通过 View -> Show Postman Console 打开。
在 Console 中可以看到:
✅ 所有 HTTP 请求和响应记录
✅ 使用 console.log()
输出的日志信息
7. 创建请求序列
到目前为止,我们只处理了单个请求。接下来,我们将创建多个请求,模拟客户端与服务器的交互流程。
7.1. 使用变量保存响应值
在 POST 请求的测试脚本末尾添加如下代码,将响应中的 id
存入变量:
pm.variables.set("id", pm.response.json().id);
✅ pm.variables.set()
:设置临时变量
✅ 后续请求中可以使用 {{id}}
引用该变量
7.2. 添加 GET 请求
新增一个 GET 请求,命名为 “get a foo”,URL 为:
http://localhost:8082/spring-boot-rest/auth/foos/{{id}}
测试脚本如下:
pm.test("success status", () => pm.response.to.be.success );
pm.test("name is correct", () =>
pm.expect(pm.response.json().name).to.equal("Transformers"));
pm.test("id is correct", () =>
pm.expect(pm.response.json().id).to.equal(pm.variables.get("id")) );
7.3. 添加 DELETE 请求
新增一个 DELETE 请求,命名为 “delete a foo”,URL 与 GET 相同:
http://localhost:8082/spring-boot-rest/auth/foos/{{id}}
测试脚本只需验证状态码:
pm.test("success status", () => pm.response.to.be.success );
7.4. 验证 DELETE 是否成功
复制第一个 GET 请求,重命名为 “verify delete”,并将其拖拽到 DELETE 请求之后。
修改测试脚本如下:
pm.test("status is 500", () => pm.response.to.have.status(500) );
pm.test("no value present", () =>
pm.expect(pm.response.json().cause).to.equal("No value present"));
执行后,可以看到测试失败(因为资源已被删除):
7.5. 执行完整 Collection
最终的 Collection 包含 4 个请求,共 9 个测试用例。点击 Run 按钮执行:
如果一切正常,所有测试都会通过 ✅
8. 导出与导入 Collection
虽然 Postman 默认将 Collection 保存在本地,但我们也可以将其导出为 JSON 文件以便共享。
✅ 导出:在 Collection 的省略号菜单中选择 Export,选择推荐的 JSON 版本
✅ 导入:点击主界面的 Import 按钮,选择 JSON 文件即可
⚠️ 注意:Postman 不会自动同步导出文件的更改,如需更新需重新导入。
9. 总结
本教程介绍了如何使用 Postman 构建半自动化的 REST API 测试流程。虽然只涉及了 Postman 的基础功能,但它已经足够强大。如需深入学习,可以参考 Postman 官方文档。