- Postman 的断言写在请求页签底部的 Tests 中,基于
pm.test()+pm.expect()(基于 Chai.js BDD 风格)语法。 - 断言的结果显示在下方的响应页签的 Test Results中
- pm=postman的缩写
- Chai.js是一个流行的 JavaScript 断言库(Assertion Library) ,专门用于写测试用例中的"预期判断",本身不跑测试,只负责帮你用接近自然语言的语法做断言判断
一、理解什么是断言
- assert在编程和测试领域,标准中文翻译就是「断言」
- assert= 断言 = "我认定这件事一定成立,否则就是错误"
- 在测试中,它用来对比「实际结果」和「预期结果」,是自动化测试的灵魂。
英文 assert本身 是动词,意思是:断言 / 声称 / 坚决认为某事为真
比如日常英语:I assert that he is guilty. 我断言他有罪。
关键点在于:说话者非常确定 ,如果事实证明是错的,那就是严重问题
在代码里 ,assert是一种对程序状态的硬性声明:
我断言这个条件一定成立,如果不成立,程序就直接报错。
python
assert age > 0
//如果 age <= 0,程序立刻抛异常(AssertionError)
在测试里 ,assert的含义变成了:我断言"实际结果"必须等于"预期结果"
python
assert response.status_code == 200
//我断言接口返回的状态码一定是 200
//如果不是,测试失败
二、状态码(Status code)断言
javascript
// 精确匹配
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
//响应中有状态200
});
// 多个可选值(如 POST 创建成功)
pm.test("Successful POST", function () {
pm.expect(pm.response.code).to.be.oneOf([201, 202]);
//断言响应码是其中的一个[201,202]
});
三、响应体(Body)断言
javascript
// 响应文本包含某字符串
pm.test("Body contains keyword", function () {
pm.expect(pm.response.text()).to.include("success");
//断言响应文本包含''success''字符串
});
// JSON 字段值精确匹配
var jsonData = pm.response.json();
pm.test("code equals 0", function () {
pm.expect(jsonData.code).to.eql(0);
//断言JSON数据的code字段值等于0
});
// JSON 字段存在
pm.test("has data field", function () {
pm.expect(jsonData).to.have.property('data');
//断言JSON数据的中有'data'字段
//property = 属性、字段 对应:对象的键 / 字段
});
// 数组长度校验
pm.test("list length > 0", function () {
pm.expect(jsonData.list.length).to.be.above(0);
//断言JSON数据的 list字段的长度(即元素个数) 在0之上(即>0)
});
// 类型校验
pm.test("id is number", function () {
pm.expect(jsonData.data.id).to.be.a('number');
//断言JSON数据的 data字段下的 id 字段是一个'number'类型(即数字)
});
JSON中的{ }用.隔开, 用下标锁定
四、响应头 / Cookie 断言
javascript
// Header 存在
pm.test("Content-Type present", function () {
pm.response.to.have.header("Content-Type");
});
// Header 值包含
pm.test("is JSON", function () {
pm.expect(pm.response.headers.get("Content-Type")).to.include("application/json");
});
// Cookie 存在
pm.test("cookie exists", function () {
pm.expect(pm.cookies.has('sessionId')).to.be.true;
});
参考文章:HTTP协议-CSDN博客
五、性能 / 其他断言
javascript
// 响应时间低于阈值
pm.test("Response time < 500ms", function () {
pm.expect(pm.response.responseTime).to.be.below(500);
});
// 与环境变量比对
pm.test("name matches env var", function () {
pm.expect(jsonData.name).to.eql(pm.environment.get("expectedName"));
});
六、快速生成断言
Postman Tests 面板右侧有 SNIPPETS(代码片段) ,点击如 Status code is 200 、Response body: JSON value check等可自动插入模板,改改字段名就能用