Part1 概念
在Tests模块中,使用 JavaScript 为 Postman API 请求编写测试脚本,来验证 API 是否按预期工作,服务之间的集成是否可靠地运行,以及新的开发是否未破坏任何现有功能(从官网看的)。总而言之,Tests模块的作用很多,比如接口依赖、断言。
Tests模块中写的脚本,是在请求运行后/前执行的。
在集合、文件夹、请求中,都有Tests模块,区别是他们的作用域不同。
这里主要介绍测试断言的一些脚本函数。
Part2 一个简单的测试脚本
比如,有一个登录请求,在Postman中打开请求,然后打开Tests页签,输入下面JS脚本:
pm.test("Status code is 200", function(){
pm.response.to.have.status(200);});
这个JS脚本的作用是检查API请求返回的响应代码,如果响应代码为200,则代表测试通过,否则代表测试失败。
运行脚本之后,得到下面的结果,可以看到响应代码是200,测试通过:
如果改一下脚本中的值,将200改成404,再次运行脚本,就得到了FAIL,并且有提示信息,说我们断言中期望的是404,但实际结果是200:
Part3 使用多个断言
在写脚本时,可以将多个断言组合在一起:
pm.test("The response has all properties", ()=>{
pm.expect(pm.response.text()).to.include("10000");
pm.response.to.have.status(200);
//console.error(pm.response.text())});
运行的时候,所有的断言都通过,才算是通过,任何一个断言失败,整个测试都会失败:
Part4 常用断言介绍
1.验证返回状态码是不是200
pm.test("Status code is 200", function(){
pm.response.to.have.status(200);});
2.验证返回body内是否含有某个值
pm.test("Body matches string", function(){
pm.expect(pm.response.text()).to.include("string_you_want_to_search");});
比如有一个请求,返回的body是下面的结构:
然后我们可以判断是否有“success”这个字符串,可以写成:
pm.test("Body matches string", function(){
pm.expect(pm.response.text()).to.include("success");});
有时候为了更准确的判断,会判断指定的字段,比如直接判断"msg"是否包含"success":
var jsonData = JSON.parse(responseBody)
console.log(jsonData)
pm.test("Body matches string", function(){
pm.expect(jsonData.msg).to.include("success");});
3.验证某个返回值是否等于XXX
pm.test("Your test name", function(){
var jsonData = pm.response.json();
console.log(jsonData)
pm.expect(jsonData.value).to.eql(100);});
还是第2点的那个例子,判断"code"是否等于"0":
4.检查响应主体是否等于一个字符串
pm.test("Body is correct", function(){
pm.response.to.have.body("response_body_string");});
返回格式如下:
判断返响应主题是否等于:
pm.test("Body is correct", function(){
pm.response.to.have.body('{\n"message": "登录成功",\n "code": 200,\n "data": {\n "token": \nXXXX" \n}\n}"');});
判断失败是因为token是不一样的。不过这个,我个人很少用到。
5.判断返回头类型
pm.test("Content-Type is present", function(){
pm.response.to.have.header("Content-Type");});
判断返回头是否包含"Content-Type"和"Transfer-Encoding"
pm.test("res header is have", function(){
pm.response.to.have.header("Content-Type");
pm.response.to.have.header("Transfer-Encoding");});
实际的返回头:
判断结果:
6.请求时长是否小于XXXms
pm.test("Response time is less than 200ms", function(){
pm.expect(pm.response.responseTime).to.be.below(200);});
7.判断返回码是否在期望列表里
pm.test("Successful POST request", function(){
pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]);});
返回码是200,在列表里,就是通过:
8.判断响应代码里包含的字符串
pm.test("Status code name has string", function(){
pm.response.to.have.status("Created");});
比如请求成功,返回的字符串是OK:
pm.test("Status code name has string is OK", function(){
pm.response.to.have.status("OK");});
版权归原作者 进击的小陈 所有, 如有侵权,请联系我们删除。