写点什么

接口测试|Postman 设置断言

  • 2023-08-02
    北京
  • 本文字数:2600 字

    阅读完需:约 9 分钟

Postman 设置断言

作为一款接口测试工 具,postman 需要对发送请求后返回的结果是否正确做验证,在 postman 中通过 tests 页签做请求的验证,也称为断言。

Postman 设置断言的流程

  1. 在 tests 页签截取要对比的实际响应信息(响应头、响应正文、响应状态码等)

  2. 利用断言语句 tests[] 或 chai.js 形式把实际响应信息与期望结果对比

  3. 执行请求进行结果查看


在 postman 设置断言,存在新老版本的断言语法不一致的情况,目前两种语法都可以使用:


语法一: tests[‘测试用例名称’] = 逻辑表达式


断言语法一视图:



postman 在 tests 页签获取响应内容:


tests 页签支持 javascripts 语法,可以把获取的响应内容放入定义的变量中。 然后使用 tests[变量名]进行输出。


截取实际响应信息的新老版本代码对比;如下图



1、获取响应行


var code = responseCode.code; //获取响应状态码 var name = responseCode.name; //获取响应状态信息


2、获取响应头


var content_type = postman.getResponseHeader('Content-Type') //获取响应头 var path = postman.getResponseCookie('_ac_app_ua').path ; //获取 cookie 信息


3、获取响应正文


var body = responseBody


4、获取响应时间


var time = responseTime


5、利用正则表达式截取部分响应正文


var title = body.match(new RegExp('<title>(.+?)</title>'))[1]


6、响应正文为 json 时,可以利用 postman 进行解析再获取部分响应正文


var jsondata = JSON.parse(responseBody); //把响应正文转化为 json 对象 var token = jsondata.access_token; //json 对象名.键名


在 tests 页签中编写语法如下:


// 新旧版本写法------------//获取响应行//旧版本var code = responseCode.code  //获取响应状态码tests["case_demo_01: 验证响应状态码是否为200"] = code === 200 //做断言var name = responseCode.name  //获取响应状态信息tests["case_demo_02: 验证响应的状态信息是否正确"] = name === "OK"//新版本var code = pm.response.code //获取响应状态码tests["case_demo_001: 验证响应状态码是否为200"] = code === 200 //做断言var name = pm.response.status  //获取响应状态信息tests["case_demo_002: 验证响应的状态信息是否正确"] = name === "OK"
//获取响应头
//旧版本var content_type = postman.getResponseHeader('Content-Type') //获取响应头tests["case_demo_03: 验证响应头是否正确"] = content_type === "application/json; encoding=utf-8"//新版本var content_type = pm.response.headers //获取响应头tests["case_demo_003: 验证响应头是否正确 "+content_type] = true
// 获取响应时间//旧版本var time = responseTimetests["case_demo_04: 验证响应时间是否正确 "+ time] = truetests["case_demo_004: 验证响应时间是否在100-500ms以内返回"] = time >=100 && time<=500//新版本var time = pm.response.responseTimetests["case_demo_00004: 验证响应时间是否正确 "+ time] = true
//获取响应正文 text//旧版本var body = responseBodytests['case_demo_05: 验证响应正文是否正确 '+ body] = truetests["case_demo_005: 验证响应正文是否包含 7200"] = body.has("7200") //判断是否包含//新版本 var body = pm.response.text()tests['case_demo_0005: 验证响应正文是否正确 '+ body] = truevar title = body.match(new RegExp('<title>(.+?)</title>'))[1]; //利用正则表达式截取部分响应正文tests["case_demo_00005: 验证响应正文中的title是否包含 猫_百度搜索"] = title === "猫_百度搜索"
//json格式响应正文 通过json视图更清晰//旧版本var jsondata = JSON.parse(responseBody) //把响应正文转化为json对象var expires_in = jsondata.expires_in //json对象名.键名tests["case_demo_06: 验证json格式响应正文是否正确 "] = expires_in === 7200//新版本var jsondata = pm.response.json() //把响应正文转化为json对象var expires_in = jsondata.expires_in //json对象名.键名tests["case_demo_006: 验证json格式响应正文是否正确 "] = expires_in === 7200
复制代码


断言的展示结果如下图:



语法二: Chai.js 断言库,可以通过右侧页签点击生成代码(新版本写法-推荐)


chai.js 断言介绍:


  1. 是一套 TDD(测试驱动开发)/BDD(行为驱动开发)的断言库

  2. 包含有 3 个断言库支持 BDD 风格的 expect/should 和 TDD 风格的 assert

  3. 可以高效的和任何 js 测试框架搭配使用(支持在 postman 中应用)


断言语法二视图:



在 tests 页签中编写语法如下:


//新版本写法------pm.test("测试用例标题", function () {    pm.expect(true).to.be.true;    //chai.js断言编写处  });
pm.test("case_demo_01 *****", function () { pm.expect(2<5 && 3<6).to.be.true //判断是否为true});
pm.test("case_demo_02 *****", function () { pm.expect("everything").to.be.ok //判断是否为真值 非空、非0 即为真});
pm.test("case_demo_03 *****", function () { pm.expect("hello").to.equal("hello") //判断是否相等});
pm.test("case_demo_04 *****", function () { pm.expect({list:"aaa"}).to.eql({list:"aaa"})//判断是否深度相等});
pm.test("case_demo_05 *****", function () { pm.expect("foobar").to.have.string("bar") //判断是否包含字符串});
pm.test("case_demo_06 *****", function () { pm.expect("foobar").to.match(/^foo/) //判断是否包含,支持正则表达式});
//实例------//响应行的状态码pm.test("case_demo_07 *****", function () { pm.expect(pm.response.code === 200).to.be.true //判断响应状态码是否为200});//响应行的信息pm.test("case_demo_08 *****", function () { pm.expect(pm.response.status === "OK").to.be.true //判断响应状态信息是否为OK});//响应正文 textpm.test("case_demo_09 *****", function () { pm.expect(pm.response.text()).to.have.string("猫_百度搜索") //判断响应正文中是否包含猫_百度搜索});//响应正文 jsonpm.test("case_demo_10 *****", function () { var jsonData = pm.response.json(); pm.expect(jsonData.expires_in).to.eql(7200); //判断json响应正文中是否有7200});
复制代码


断言的展示结果如下图:



获取更多技术资料,请点击!

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019-10-23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
接口测试|Postman设置断言_Postman_霍格沃兹测试开发学社_InfoQ写作社区