Postman接口测试四 | Tests断言

2020/11/10 Postman

断言简介

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,添加断言内容

Search

    Post Directory