测一个现代应用,你既要验证用户在浏览器里看到的东西,也得管住背后 API 到底在干什么。
但这里有个我踩过无数次的坑:UI 测试全绿,API 契约却在背地里悄悄崩了;或者 API 测试一切正常,前端压根就调错了接口。
这篇文章里,我会带你把 Postman 新上线的 Application Inventory 走一遍——它把 Playwright 的 UI 测试和 Postman 的 API 契约校验接在了一起,正好补上这个缺口。
你会看到怎么基于真实的 API 调用来分析 UI 的实际行为,把传统测试方式漏掉的问题揪出来。
我用一个简单的用户权限管理应用来演示整套流程,它负责用户访问控制相关的 CRUD 操作。这个应用管四类核心权限:
前端是常见的 React/JavaScript 技术栈,通过调用 REST API 来管理这些权限。
请先确认你的应用已经关联到某个 workspace。
这一步就是 Postman 的 Agent Mode 真正好用的地方。你完全不用从零手写 Playwright 测试,Agent Mode 可以直接照着你的前端代码帮你生成。
我的用户权限 collection 已经在 Postman 里建好了,于是我打开 Agent Mode,敲了这么一句提示词:
Agent Mode 给我生成的东西:
Playwright 测试生成好了,接下来我跑 Postman CLI 的初始化命令:
这条命令会一路问我几个配置问题:
CLI 自己识别到了我的 package.json,然后建议我用 npx playwright test。
初始化过程生成了一个 postman.config.cjs 文件,上面这些信息全写在里面:
CI=true 这个标志告诉 Postman 以持续集成模式运行,结果不光打到终端,还会存进 Application Inventory。
talia.kohan@postman.com@PM-L2Y6LJPHFX user-permissions % CI=true postman application test[app:test] Loading local collection: /Users/talia.kohan@postman.com/Postman/user-permissions/postman/collections/User Permissions API-1[app:test] Loading local environment: /Users/talia.kohan@postman.com/Postman/user-permissions/postman/environments/User Permissions API - Local 1.environment.yaml[app:test] Starting command(primary task): npx playwright testRunning 4 tests using 1 worker ✓ 1 …s:28:3 › User Permissions management UI › reflects the selected user in the permissions header (932ms) ✓ 2 … User Permissions management UI › toggling a permission and saving shows a success notification (1.6s) ✓ 3 ….spec.ts:87:3 › User Permissions management UI › Save button shows a loading state while saving (2.2s)4 passed (10.4s)[app:test] Command finished. Running test tasks...→ Running Postman tests against 43 captured requests (20 deduplicated) ┌ chrome › user-permissions.spec.ts › User Permissions management UI › reflects the selected user in the permissions header │ UI Test: passed | duration: 773ms └ 5 matched ★ 0 not matched ★ 5 total ┌ chrome › user-permissions.spec.ts › User Permissions management UI › toggling a permission and saving shows a success notification │ UI Test: passed | duration: 1496ms └ 6 matched ★ 0 not matched ★ 6 total ┌ chrome › user-permissions.spec.ts › User Permissions management UI › Save button shows a loading state while saving │ UI Test: passed | duration: 2091ms └ 6 matched ★ 0 not matched ★ 6 total┌────────────────────┬────────────────────────────────────┐│ collections │ 1 │├────────────────────┼────────────────────────────────────┤│ tests │ 4 │├────────────────────┼────────────────────────────────────┤│ requests captured │ 43 │├────────────────────┼────────────────────────────────────┤│ requests matched │ 23 matched ★ 0 not matched │├────────────────────┼────────────────────────────────────┤│ assertions │ 23 total ★ 0 passed ★ 0 failed │└────────────────────┴────────────────────────────────────┘[app:test:analytics] remote ingest finished✓ Run results were stored in Postman.
浏览器窗口里,我的 Playwright 测试实时跑着;同时 Postman 在旁边把这些 UI 交互过程中发出的每一次 API 调用都抓下来、校验掉。
每次代码变更触发流水线,我都能拿到:
API 文档说的是一套,UI 干的又是另一套。前端代码调了没写进文档的接口,或者请求格式跟预期对不上,Application Inventory 都能发现。
只要 DOM 元素还在,哪怕 API 返回的是错误响应,你的 UI 测试也可能照样通过。在 UI 测试过程中顺手校验 API 响应,这类静默失败就跑不掉了。
你的 API 测试可能很全,但只出现在某些特定 UI 流程里的边界场景,它照样漏。这套方法能保证 API 测试覆盖的是真实使用模式。
Postman 和 Playwright 的这次集成,是契约测试的一次重要演进。传统契约测试验证的是 API 是否符合文档中声明的规范,但它通常是脱离真实用户流程、孤立进行的。
UI 测试和 API 校验打通,意味着测试思路在往更贴近真实的方向走。不再孤立地测单个组件,而是验证完整的用户旅程——从浏览器交互一路管到后端响应。
你多半会发现:前端偷偷调了一些你根本不知道的接口,或者文档化的 API 和实际用法之间对不上。
E N D

