5. 断言与自动化测试
这是什么:Tests = 每个请求自带的响应后脚本(Post-response script),响应回来后自动执行;脚本里写的「结果必须如此」就是断言(Assertion,自动检查对错的代码)。
为什么用:人肉盯状态码又慢又漏——几十个接口谁盯得过来?断言是你雇的验收员:一次写好,每按一次 Send 都自动验收,绿勾过、红叉挂,交给电脑不交给眼睛。
如何用:先给第 4 章的集合写两条最常用的断言跑绿,再用 Collection Runner 批量跑全集合,最后认识一句话的 Newman(命令行、CI 的入口)。
5.1 写两条最常用的断言
打开集合里「拿一篇文章」这个请求,切到 Scripts 标签下的 Post-response 区(老版本里它叫 Tests,名字不同、位置就在「响应之后」),写入:
pm.test("状态码是 200", function () {
pm.response.to.have.status(200);
});
pm.test("id 字段等于 1", function () {
const json = pm.response.json();
pm.expect(json.id).to.eql(1);
});
点 Send,响应区的脚本结果栏会出现:
✓ 状态码是 200
✓ id 字段等于 1
2/2 Passed
| 代码 | 作用 |
|---|---|
pm.test(名字, function) |
注册一条断言,名字随你起——它就是失败时喊的话 |
pm.response.to.have.status(200) |
要求状态码必须是 200 |
pm.response.json() |
把响应体解析成对象,好取字段 |
pm.expect(json.id).to.eql(1) |
要求该值严格等于 1(eql = 深度相等) |
5.2 保存后自动验证
脚本随请求保存,以后每按一次 Send 都自动跑一遍,不用再管。把它调教出「挂在眼前」的效果:故意把 .to.eql(1) 改成 .to.eql(999),Send——红叉当场出现。你修好了吗?改回来,又全绿。接口挂没挂,从此电脑说了算。
5.3 Collection Runner:批量一把梭
单请求断言会了,就能批量验收整个集合:
- 左侧 Collections 里「文章接口」上点 … → Run collection(或打开右侧栏的 Runner 拖入集合)
- 确认环境选好、请求都勾上,点 Run 文章接口
- 每个请求跑出一行结果
你会看到:
文章接口 · 3 requests, 3 passed, 0 failed
✓ 拿文章列表 200 OK
✓ 拿一篇文章 200 OK
✓ 发一篇文章 201 Created
哪条红了直接点开看,断言名字就是你当初起的「报错喊话」。给每个请求都配上断言,这个界面就是你的接口健康体检报告。
5.4 Newman:让命令行来跑(一句话版)
Newman 是 Postman 官方的命令行 Runner——把集合导出成 .postman_collection.json,然后:
npx newman run 文章接口.postman_collection.json
不打开窗口也能跑全集合,是把它接进 CI(Continuous Integration,持续集成——代码一提交就自动跑测试的流水线)的入口。入门阶段知道有这扇门即可,第 6 章先在窗口里把活干漂亮。
记忆口诀:断言两板斧:status 看码、eql 看值;保存 Send 自动跑,Runner 一把梭,红绿就是验收单。
5.5 动手改
- 给「发一篇文章」加一条断言:状态码必须是 201
- 写一条断言验证 POST 响应里的 title 正是你发送的那个字符串(用
pm.expect(json.title).to.eql("青蛙的文章")) - 把任意一条断言故意改错,跑一遍 Runner,观察失败在报告里长什么样
5.6 小结
- Tests = 响应后自动跑的脚本,断言两句版:
to.have.status(200)、pm.expect(x).to.eql(1) - 保存即生效,每次 Send 自动验收
- Collection Runner 批量跑集合;Newman 命令行跑集合、接 CI
下一章:综合练习:调通一组 CRUD 接口 🐸