postman写断言(assert)

  • 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中的{ }用.隔开, 用下标锁定

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 200Response body: JSON value check等可自动插入模板,改改字段名就能用

相关推荐
糖果店的幽灵22 天前
软件测试接口测试从入门到精通:Postman入门到精通
软件测试·测试工具·接口测试·postman·api测试
墨香幽梦客23 天前
API集成最佳实践:Postman+MuleSoft实现ERP与OA系统无缝对接
测试工具·postman
学代码的真由酱23 天前
【自用】接口测试
接口测试·postman·测试·cookie·token鉴权
i love you china25 天前
接口测试工具postman的使用方法
测试工具·postman
Lust Dusk1 个月前
postman工具介绍(附下载教程)
测试工具·安全·web安全·postman
川石课堂软件测试1 个月前
UI自动化测试|XPath元素定位实践
功能测试·测试工具·jmeter·microsoft·ui·postman·harmonyos
VidDown1 个月前
Webhook 调试器:让第三方回调“原形毕露”
java·开发语言·javascript·编辑器·postman
森林的尽头是阳光1 个月前
前端使用postman快速造数据
前端·javascript·vue·postman·造数·本地测试