Postman(6): postman設置斷言


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM