【Postman】4 Postman test断言功能的使用
一、Postman的断言概述
断言,是一个完整测试用例所不可或缺的一部分,没有断言的测试用例仅仅是测试步骤。
Postman的Test模块就是实现请求断言功能的,也是基于Node.js的,可以确保您的API能够按预期运行,确定服务之间的集成可靠运行,并验证新开发未破坏任何现有功能。您可以将断言添加到单个请求或集合中。postman提供了很多集成的代码片段,我们只需要点击,然后进行简单的修改,就可以适用于请求的断言了。
Test中的断言脚本在收到响应后执行,当您单击Send时,当响应数据从API返回时,Postman将运行您的测试脚本。
要执行断言脚本以验证请求返回的数据,使用pm.test函数定义断言,他提供一个名称和函数,该函数返回一个布尔值(true或false)来指示测试是通过还是失败。并结合使用pm.response对象和pm.expect来测试响应详细信息。
二、Postman中断言方法的使用
1、响应状态码断言:验证响应结果的状态码是否为200
pm.test("Status code is 200", function () { pm.response.to.have.status(200); });
2、响应正文内容断言:验证响应正文中是否存在指定的字符串“1234.jpg”
pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include("1234.jpg"); });
3、响应正文内容断言:验证响应的Json格式正文中指定的字段数据是否符合预期
pm.test("断言filename为1234.jpg", function () { var jsonData = pm.response.json(); pm.expect(jsonData.value).to.eql(“1234.jpg”); });
4、响应头部断言:验证响应头部信息中是否包括指定的字段
pm.test("Content-Type is present", function () { pm.response.to.have.header("Content-Type"); });
5、响应时间断言:验证响应结果返回的时间是否在指定的范围内
pm.test("Response time is less than 200ms", function () { pm.expect(pm.response.responseTime).to.be.below(200); });
6、从csv文件中获取参数字段(如expect字段),与响应正文进行对比断言

上表中的expect字段表示测试用例的预期结果(是显示在响应正文中的字符),我们可以如下设置断言,具体使用在后续参数化和testrunner文章中详解:
pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include(data.expect); });
三、断言结果的查看
设置好test下的断言之后,点击send按钮发送请求,在response区域的Test results中可以查看断言是否成功
四、常见的pm的使用
该pm对象包含与正在执行的脚本有关的所有信息,并允许一个对象访问正在发送的请求或已接收的响应的副本。它还允许获取并设置环境和全局变量。
1、pm.response
在测试脚本中,该pm.response对象包含与收到的响应有关的所有信息:
pm.response.code:Numberpm.response.status:Stringpm.response.headers:HeaderListpm.response.responseTime:Numberpm.response.responseSize:Numberpm.response.text():Function → Stringpm.response.json():Function → Object
2、pm.expect
在测试脚本中,该pm.expect处理response或variables的数据断言很有用。
测试脚本中提供了Response Assertion API
pm.response.to.have.status(code:Number)pm.response.to.have.status(reason:String)pm.response.to.have.header(key:String)pm.response.to.have.header(key:String, optionalValue:String)pm.response.to.have.body()pm.response.to.have.body(optionalValue:String)pm.response.to.have.body(optionalValue:RegExp)pm.response.to.have.jsonBody()pm.response.to.have.jsonBody(optionalExpectEqual:Object)pm.response.to.have.jsonBody(optionalExpectPath:String)pm.response.to.have.jsonBody(optionalExpectPath:String, optionalValue:*)pm.response.to.have.jsonSchema(schema:Object)pm.response.to.have.jsonSchema(schema:Object, ajvOptions:Object)

浙公网安备 33010602011771号