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 });
斷言的展示結果如下圖:
???自動化測試相關教程推薦:
2023最新自動化測試自學教程新手小白26天入門最詳細教程,目前已有300多人通過學習這套教程入職大廠!!_嗶哩嗶哩_bilibili
2023最新合集Python自動化測試開發框架【全棧/實戰/教程】合集精華,學完年薪40W+_嗶哩嗶哩_bilibili
測試開發相關教程推薦
2023全網最牛,字節測試開發大佬現場教學,從零開始教你成為年薪百萬的測試開發工程師_嗶哩嗶哩_bilibili
postman/jmeter/fiddler測試工具類教程推薦
講的最詳細JMeter接口測試/接口自動化測試項目實戰合集教程,學jmeter接口測試一套教程就夠了!!_嗶哩嗶哩_bilibili
2023自學fiddler抓包,請一定要看完【如何1天學會fiddler抓包】的全網最詳細視頻教程!!_嗶哩嗶哩_bilibili
2023全網封神,B站講的最詳細的Postman接口測試實戰教學,小白都能學會_嗶哩嗶哩_bilibili
??總結:
?光學理論是沒用的,要學會跟著一起敲,要動手實操,才能將自己的所學運用到實際當中去,這時候可以搞點實戰案例來學習。
如果對你有幫助的話,點個贊收個藏,給作者一個鼓勵。也方便你下次能夠快速查找。
如有不懂還要咨詢下方小卡片,博主也希望和志同道合的測試人員一起學習進步
在適當的年齡,選擇適當的崗位,盡量去發揮好自己的優勢。
我的自動化測試開發之路,一路走來都離不每個階段的計劃,因為自己喜歡規劃和總結,
測試開發視頻教程、學習筆記領取傳送門!!
?