断言简介
Postman提供了一些断言方法,对接口做断言测试。Request 区域点击tab“Tests”, 编写断言脚本。当然,postman也提供了一些现成的断言的示例,查看右边的SNIPPETS 区域,如下图所示:
点击后,套用模板填写,点击send发送请求。在Response 区域点击tab “Test Results” 查看断言结果,断言成功则pass,断言失败则fail。如下所示:
前提
接口返回结果如下所示(网上很多例子都没有返回结果的结构图,看起来很不方便)
断言脚本
1.Status code: Code is 200
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
// 断言返回状态码,预期中写的是200,因此,返回200就pass,返回非200fail
//“Status code is 200”处的内容是直接输出的,可以任意写,示例如下:
写了两条关于返回值的断言,第一条pass,第二条fail
2.Response body: JSON value check
pm.test("检查返回的ID是203", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.data.user_info.user_id).to.eql(203);
});
//断言返回结果中的用户id是203,示例如下:
3.Response body: is equal to a string
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
//断言返回结果和预期的结果一致,比对的是返回的所有body,因此"response_body_string"处需要将接口返回的raw结果```{"code":200,"data":{}} ```[转义](https://www.json.cn/json/jsonzip.html)后,全部拷贝到“”处,
例如:
4.Response body: contain string
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
//断言返回中包含某个value,例如返回内容如下,断言结果中包含“HelloHello”
5.Response headers: Content-Type header check
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
//断言返回的结果中header中包含指定的字段,如包含Content-Type,包含Content-Encoding,或者包含其他的字段
例如:
6.Response time is less than 200ms
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
//断言接口返回时间,这个很简单,不用说
7.Status code: Successful POST request
pm.test("Successful POST request", function () {
pm.expect(pm.response.code).to.be.oneOf([201, 202]);
});
//断言post请求状态码是201和202的其中一个,则pass,否则fail。使用场景暂不清楚
试了一下get接口,也能用[手动捂脸]
8.Status code: Code name has string
pm.test("Status code name has string", function () {
pm.response.to.have.status("OK");
});
//断言返回状态码的名字
返回状态和对应名称如下所示了一部分
状态码 | 名称 |
---|---|
100 | Continue |
500 | InternalServerError |
501 | NotImplemented |
502 | BadGateway |
503 | ServiceUnavailable |
9.Response body: Convert XML body to a JSON Object
var jsonObject = xml2Json(responseBody);
//没有找到合适的例子,略过,后续补充
10.Use Tiny Validator for JSON data
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;
});
//断言返回值中JSON的结构,参数,参数类型,必需字段
以获取注册天数的接口举个例子,以下是返回数据:
{
"code": 200,
"data": {
"room_count": 0,
"reg_days": 89
}
}
脚本如下所示:
var schema = {
properties: {
code: {type:"number"},
data: {
properties:{
room_count:{type:"number"},
reg_days:{type:"number"},
},
required:["room_count","reg_days"]
},
},
required:["code"]
};
var data1 = JSON.parse(responseBody);
pm.test('Schema is valid', function () {
pm.expect(tv4.validate(data1, schema)).to.be.true;
});
//1,断言必需字段是code,data,room_count,reg_days。2,断言数据类型。Code,room_count,reg_days等字段是number型,data是object型。3,required是验证必需字段。
点击send后,结果如下:
当验证必需字段的时候,如果增加一个字段name,则验证结果是fail
批量断言
点击collection对应的菜单栏 > Edit >Test ,写上断言的内容,update
运行整个collection
获得结果。如果接口原来就有test的话,会断言两条,如下所示
备注:postman有个bug,害我今天试了好多遍批量断言 New > collection >Tests,输入对应的断言内容后,再增加接口,再批量跑,竟然pass 0 fail 0。因此建议大家还是用上面的方法,直接Edit Collection,添加断言内容