什么是断言
做过测试的同学,都知道断言。如果结果和预期一致,则用例通过;如果不一致,则断言失败,用例失败。
有了断言后,就为我们做自动化提供了条件,并且在postman中的断言是非常方便和强大的 ,甚至强大到可以用postman来做一个api collection test,就是整个API合集的测试,看下项目是否regression test成功,诸如此类。
Postman中断言
- 断言编写位置:Tests标签
- 断言所用语言:JavaScript
- 断言执行顺序:在响应体数据返回后执行 。
- 断言执行结果查看:Test Results
那如果不会写怎么办 ?不用担心,因为postman已经给我们内置了一些常用的断言 。用的时候,只需从右侧点击其中一个断言,就会在文本框中自动生成对应断言代码块 。

常用断言
接下来就让我们了解一些常用断言,还是按响应的组成来划分,分别是状态行,响应头,响应体。
状态行中又包括状态码
,状态消息
。在postman也可以对这两个进行断言
状态行中的断言:
断言状态码:Status code: code is 200
pm.test("Status code is 200", function () {
pm.response.to.have.status(200); //这里填写的200是预期结果,实际结果是请求返回结果
});
断言状态消息:Status code:code name has string
pm.test("Status code name has string", function () {
pm.response.to.have.status("OK"); //断言响应状态消息包含OK
});
响应头中的断言
断言响应头中包含:Response headers:Content-Type header check
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type"); //断言响应头存在"Content-Type"
});
断言响应体(重点)
断言响应体中包含XXX字符串:Response body:Contains string
pm.test("Body matches string", function () {
//by zhengkai.blog.csdn.net
//pm.expect(pm.response.text()).to.include("string") 获取响应文本中包含string
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
断言响应体等于XXX字符串:Response body : is equal to a string
pm.test("Body is correct", function () {
//pm.response.to.have.body("response_body_string"); 获取响应体等于response_body_string
pm.response.to.have.body("response_body_string");
});
断言响应体(json)中某个键名对应的值:Response body : JSON value check
pm.test("Your test name", function () {
//var jsonData = pm.response.json() 获取响应体,以json显示,赋值给jsonData .注意:该响应体必须返会是的json,否则会报错
//pm.expect(jsonData.value).to.eql(100) 获取jsonData中键名为value的值,然后和100进行比较
//by zhengkai.blog.csdn.net
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
响应时间(一般用于性能测试)
断言响应时间:Response time is less than 200ms
pm.test("Response time is less than 200ms", function () {
//断言响应时间<200ms
pm.expect(pm.response.responseTime).to.be.below(200);
});
动手实践
1. 例如 https://postman-echo.com/delay/3
官方测试接口中返回
{
"delay": "3"
}
通过判断 pm.expect(jsonData.delay).to.eql("3");
来判断是否返回对应的报文
pm.test("delay=3", function () {
//var jsonData = pm.response.json() 获取响应体,以json显示,赋值给jsonData .注意:该响应体必须返会是的json,否则会报错
//pm.expect(jsonData.value).to.eql(100) 获取jsonData中键名为value的值,然后和100进行比较
//by zhengkai.blog.csdn.net
var jsonData = pm.response.json();
pm.expect(jsonData.delay).to.eql("3");
});
pm.test("Response time is less than 200ms", function () {
//断言响应时间<200ms
pm.expect(pm.response.responseTime).to.be.below(200);
});
2. 直接在postman中debug变量
别忘了这是一个IDE,也是一个JavaScript环境,那么console.log将非常适合用来debug各种变量
3.判断接口返回内容
例如https://postman-echo.com/deflate
接口中返回
{
"deflated": true,
"headers": {
"x-forwarded-proto": "https",
"x-forwarded-port": "443",
"host": "postman-echo.com",
"x-amzn-trace-id": "Root=1-6145f3e0-31f175e96cb3a516223d1a97",
"user-agent": "PostmanRuntime/7.28.4",
"accept": "*/*",
"postman-token": "6ba52af7-042b-4ae9-9389-bf26dd12cb5b",
"accept-encoding": "gzip, deflate, br",
"cookie": "sails.sid=s%3AALaKDmjvuKFzUmhfPaq9Oj01WO5qYrfs.k6s4kF%2B9OO%2FE3CWP9EuO%2FMVbgM8I6g5iNbQWtzpgdb8"
},
"method": "GET"
}
tests["response code is 200"] = responseCode.code === 200;
try {
var data = JSON.parse(responseBody);
var jsonData = pm.response.json();
tests["Body contains deflated"] = responseBody.has("deflated");
tests["Body contains headers"] = responseBody.has("headers");
tests["Body contains method"] = responseBody.has("method");
tests["host includes postman-echo.com"] = pm.expect(jsonData.headers.host).to.include("postman-echo.com");
}
catch(e) {
console.log('Cannot parse response,probably not a JSON');
}
4. 设置环境变量
//by zhengkai.blog.csdn.net
var id = pm.variables.get("id");
console.log(id);
console.log("after");
var jsonData = pm.response.json();
id = jsonData.headers["postman-token"] ;
console.log(id)
pm.environment.set("id",id)
console.log(id);
这样就可以很方便设置环境变量
了,对于需要获取token
再设置到另一个api中以变量{{token}}
的方式来说,会变得非常方便。