跳到主要内容

如何使用断言

什么是断言

提示

断言一般用于 后执行脚本 用来校验响应结果是否符合预期。

在协作开发、版本升级、服务器升级、接口返回的过程中,有可能因为一些bug,和我们预期的结果不一致。为了便于开发&测试人员能够更快的发现bug,保证整个产品的质量以及进度,于是我们推出了断言功能。

  1. 定义测试用例
  1. 验证测试用例

例如接口返回:

{
"errcode": 0,
"errstr": "success",
"post": {
"body": "test"
},
"get": [],
"request": {
"body": "test"
},
"file": [],
"put": "",
"header": {
"User-Agent": "ApiPOST Runtime +https://www.apipost.cn",
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br",
"Connection": "keep-alive",
"Hello": "Tom",
"Cookie": "cookie-test5=nihao;cookie-test1=0;cookie-test2=0;cookie-test8=renge;cookie-test3=%25E4%25BD%25A0%25E5%25A5%25BD;cookie-test4=%E4%BD%A0%E5%A5%BD;httponly-cookie=httponly-value",
"Host": "echo.apipost.cn",
"Content-Type": "multipart/form-data; boundary=--------------------------856985481572999749293071",
"Content-Length": "163"
},
"cookie": {
"cookie-test5": "nihao",
"cookie-test1": "0",
"cookie-test2": "0",
"cookie-test8": "renge",
"cookie-test3": "%E4%BD%A0%E5%A5%BD",
"cookie-test4": "你好",
"httponly-cookie": "httponly-value"
},
"bigint": 248963637882912768
}

定义测试用例:

apt.assert('response.raw.status==200');
apt.assert('response.raw.type=="json"');
apt.assert('response.json.errcode==0');
apt.assert('response.raw.responseTime<100');
apt.assert('response.json.header.Host=="echo.Apipost.cn"');

点击发送按钮后:

markdown picture

绿色表示测试通过,红色表示测试不通过。

特别注意:==每个测试用例是一行,不能换行。==

例:apt.assert('response.json.header.Host=="echo.Apipost.cn"');

1)response.json.header.Host 表示响应json下面的header数组中的Host字段,
2)必须都为1,才会通过。

常见的测试用例可以通过后执行脚本获取:

markdown picture

使用 Apipost 的断言格式

// 检查response body中是否包含某个string
apt.assert('response.raw.responseText=="test"'); // 检查响应文本是否等于test字符串

apt.assert('response.raw.responseText.indexOf("test") > -1'); // 检查响应文本是否含有test字符串

// 检测返回JSON中的某个值是否等于预期的值
apt.assert('response.json.hasOwnProperty("errcode")'); // 检测返回json对象的是否含有errcode字段
apt.assert('response.json.errcode=="success"'); // 检测返回json对象的errcode字段是否等于success字符串
apt.assert('response.json.errcode.indexOf("success") > -1'); // 检测返回json对象的errcode字段是否含有success字符串
apt.assert('response.json.errcode!="success"'); // 检测返回json对象的errcode字段是否不等于success字符串
apt.assert('response.json.errcode>=1'); // 检测返回json对象的errcode字段是否大于1
apt.assert('response.json.errcode==null'); // 检测返回json对象的errcode字段是否是null

// 测试response Headers中的某个元素是否存在(如:Content-Type)
apt.assert('response.headers.hasOwnProperty("content-type")');

// 验证Status code(响应码)的值是不是等于200
apt.assert('response.raw.status==200');

// 验证Response time(请求耗时)是否大于某个值
apt.assert('response.raw.responseTime>=100');

使用 Postman 的断言格式

使用文档

Apipost 7 版本起,已完全兼容 Postman 格式的断言语法,低版本的需要升级至最新版。

pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
pm.test("Successful POST request", function () {
pm.expect(pm.response.code).to.be.oneOf([201, 202]);
});
pm.test("Status code name has string", function () {
pm.response.to.have.status("Created");
});