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 = responseTime tests["case_demo_04: 驗證響應時間是否正確 "+ time] = true tests["case_demo_004: 驗證響應時間是否在100-500ms以內返回"] = time >=100 && time<=500 //新版本 var time = pm.response.responseTime tests["case_demo_00004: 驗證響應時間是否正確 "+ time] = true //獲取響應正文 text //舊版本 var body = responseBody tests['case_demo_05: 驗證響應正文是否正確 '+ body] = true tests["case_demo_005: 驗證響應正文是否包含 7200"] = body.has("7200") //判斷是否包含 //新版本 var body = pm.response.text() tests['case_demo_0005: 驗證響應正文是否正確 '+ body] = true var 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 }); //響應正文 text pm.test("case_demo_09 *****", function () { pm.expect(pm.response.text()).to.have.string("貓_百度搜索") //判斷響應正文中是否包含貓_百度搜索 }); //響應正文 json pm.test("case_demo_10 *****", function () { var jsonData = pm.response.json(); pm.expect(jsonData.expires_in).to.eql(7200); //判斷json響應正文中是否有7200 });
斷言的展示結果如下圖:
可參考:轉載至 作者 藍寅 https://www.cnblogs.com/dream66/p/12692072.html