目录
概述
断言工作原理
常用断言方法
Status code: Code is 200
Status code: Successful POST request
Status code: Code name has string
Response body: Contains string
Response body: JSON value check
Response body: ls equal to a string
Response headers: Content-Type headercheck
Response time is less than 200ms
Response body: Convert XML body to a JSON Object
Use Tiny Validator for JSON data
示例
常规断言
示例1
示例2
示例3
动态参数断言
全局断言
概述
一个完整的接口测试,包括:请求->获取响应正文->断言。其中,断言是对请求的响应结果进行操作,判断预期结果与实际结果是否一致。
在 postman 中封装了我们常见的断言(Tests),断言是用于验证API请求和响应的重要工具,Tests 除了可以作为断言,还可以当做后置处理器,常用作获取当前接口的响应,传递给下一个接口,以及控制多个接口间的执行顺序。
断言用于验证HTTP请求的响应是否符合预期。通过断言,可以检查状态码、响应头、响应体等是否符合预期。在Postman中,可以使用各种断言方法来验证响应。
断言工作原理
常用断言方法
Postman帮我们把常用的断言方法给准备好了,右侧框内下拉选择,点击自动生成断言代码。
Status code: Code is 200
Status code:检查返回的状态码是否符合预期。
//检查响应状态码是否为200
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
常见状态码:
Status code: Successful POST request
断言成功的post请求返回码
pm.test("Successful POST request", function () {
pm.expect(pm.response.code).to.be.oneOf([201, 202]);
});
Status code: Code name has string
检查响应信息中是否包含某个预期值
pm.test("Status code name has string", function () {
pm.response.to.have.status("Created");
});
Response body: Contains string
Response body:检查响应体中是否包含指定的字符串或值。
//检查响应信息中是否包含某些指定的字符串
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
Response body: JSON value check
//检查从JSON响应中获取到某个字段,判断其是否与预期字段一致
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
Response body: ls equal to a string
//检查实际获取的响应体(即 Body 信息)与预期结果的响应体是否一致
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
Response headers: Content-Type headercheck
Response headers:检查响应头是否包含指定的值。
//检查响应中的头域信息(Headers)是否与预期一致
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
Response time is less than 200ms
判断实际响应时间是否低于预期时间
//检查请求耗时小于200ms
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
Response body: Convert XML body to a JSON Object
转化XML格式的响应成JSON对象
var jsonObject = xml2Json(responseBody);
Use Tiny Validator for JSON data
为JSON数据使用tiny验证器
var schema = {
"items": {
"type": "boolean"
}
};
var data1 = [true, false];
var data2 = [true, 123];
pm.test('Schema is valid', function () {
pm.expect(tv4.validate(data1, schema)).to.be.true;
pm.expect(tv4.validate(data2, schema)).to.be.true;
});
示例
示例接口详细信息看前文:接口介绍
常规断言
示例1
断言一般包括状态断言和业务断言,如下图接口1是获取接口统一鉴权码token接口,它的关键字是access_token,采用Status code: Code is 200 检验响应状态码为200(成功),采用Response body: Contains string 检验响应中包含字符串"access_token"。
//状态断言
pm.test("检查返回状态码为200", function () {
pm.response.to.have.status(200);
});
//业务断言
pm.test("检查响应中包含access_token", function () {
pm.expect(pm.response.text()).to.include("access_token");
});
点击Send 按钮发送请求,点击Test Results 查看断言结果,下图可见测试点全部通过。
示例2
接口3是编辑标签接口,它的返回参数是errcode和errmsg,采用Response body: JSON value check
pm.test("检查errcode为0", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.errcode).to.eql(0);
});
示例3
使用Response headers: Content-Type headercheck 检查接口1响应头中是否包含Content-Type响应头,使用Response time is less than 200ms 检查接口响应时间是否低于200ms
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);
});
接口1响应头中包含Content-Type,结果通过;响应时间为332ms,高于200ms,结果失败。
动态参数断言
接口2是创建标签接口,它的关键字是标签名,前面已经将标签名使用自定义动态参数,将标签名加入自定义动态参数 {{times}} ,每次生成当前时间的时间戳,使得标签名不重复。结果报错,将自定义参数 {{times}} 当成字符串了。
解决上述问题,可以通过拼接全局变量的方式在断言中获取自定义动态参数来解决(前面已经将{{times}}设为全局变量)
①+pm.globals.get("times")
pm.test("检查响应中包含标签名", function () {
pm.expect(pm.response.text()).to.include("码尚教育"+pm.globals.get("times"));
});
②+globals["times"]
pm.test("检查响应中包含标签名", function () {
pm.expect(pm.response.text()).to.include("码尚教育"+globals["times"]);
});
③+globals.times
pm.test("检查响应中包含标签名", function () {
pm.expect(pm.response.text()).to.include("码尚教育"+globals.times);
});
全局断言
例如:每个接口都要进行状态断言,就可将状态断言设置为全局断言
发送请求后,每个接口的Test Results ,都有测试点状态码200通过。
参考:
码尚Postman学习
postman第7讲-核心功能六:Tests(断言)