一:postman設置斷言的流程
- 在tests頁簽截取要對比的實際響應信息;(響應頭、響應正文、響應狀態碼等)
- 利用斷言語句 tests[] 或 chai.js 形式把實際響應信息與期望結果對比;
- 執行請求進行結果查看;
二、截取實際響應信息的新老版本代碼對比
截取名稱 | 老版本 | 新版本 |
---|---|---|
響應狀態碼 | responseCode.code | pm.response.code |
響應狀態信息 | responseCode.name | pm.response.status |
響應頭 | postman.getResponseHeader('c_k') | pm.response.headers.get('c_k') |
響應cookie | postman.getResponseCookie('c_n').value | pm.cookies.get('c_n') |
響應正文 | responseBody | pm.response.text() |
json格式響應正文 | JSON.parse(responseBody) | pm.response.json() |
響應時間 | responseTime | pm.response.responseTime |
三、tests斷言基本語法
tests["case01 驗證是否為true"] = true; //false tests["case02 驗證是否1+1=2"] = 1+1 === 2; //判斷是否相等 tests["case03 驗證是否包含123"] = "1234567hello".has("123"); //判斷是否包含 tests["case04 驗證是否3>5"] = 3 > 5 ; //判斷是否相等 tests["case05 與運算"] = 3 > 2 && 3>1 ; //與運算 tests["case06 或運算"] = 3 > 2 || 3>5 ; //或運算 tests["case07 非運算"] = !(3 > 2); //非運算
四、chai.js斷言語法
-
- 5.1 pm.expect()
pm.test("測試用例標題", function () { pm.expect(true).to.be.true; //chai.js斷言編寫處 }); pm.expect(2<5 && 3<6).to.be.true; //判斷是否為true pm.expect('everything').to.be.ok; //判斷是否為真值 非空、非0 即為真 pm.expect('hello').to.equal('hello'); //判斷是否相等 pm.expect({ foo: 'bar' }).to.eql({ foo: 'bar' }); //判斷是否深度相等 pm.expect('foobar').to.have.string('bar'); //判斷是否包含字符串 pm.expect('foobar').to.match(/^foo/); //判斷是否包含,支持正則表達式 ......
-
- 5.2 pm.response
pm.test("Status code is 200", function () { pm.response.to.have.status(200); //判斷響應狀態碼是否是200 }); pm.test("Content-Type is present", function () { pm.response.to.have.header("Content-Type"); //判斷響應頭部信息是否包含Content-Type字段 });
-
- 5.3 tv4(Tiny Validator for JSON data)
postman使用tv4和chai.js斷言庫可以進行json schema(結構)的斷言
var schema ={ "type":"object", //表示當前節點的類型,最外層type代表json的最外層是什么樣的類型 "properties":{ //代表當前節點的子節點信息。如 access_token 和 expires_in "access_token":{ "type":"string" }, "expires_in":{ "type": "integer" } }, "required": [ //一個數組類型,代表當前節點下必需的節點key "access_token", "expires_in" ] } pm.test('Json Schema is valid', function() { var jsonData = pm.response.json(); pm.expect(tv4.validate(jsonData, schema)).to.be.true; });
五、練習怎么獲取響應值
// pm.test("檢查是否登錄?",function(){ // pm.expect(pm.response.text()).to.include("退出") // }); 斷言響應正文是否含有“退出”兩個字; // var code=responseCode.code; 獲取響應狀態碼 // tests[code]=true; // var code5 =pm.response.code; 獲取響應狀態碼 // tests[code5]=true; // var info =responseCode.name; 獲取響應狀態信息 // tests[info]=true; // var info2=pm.response.status;獲取響應狀態信息 // tests[info2]=true; // var time =responseTime; 獲取響應時間 // tests[time]=true; // var time1 =pm.response.responseTime 獲取響應時間 // tests[time1]=true; // tests ["case_demo_02:驗證請求時間是否在10S--100S之間"]=time1>=10 ||time1<=100; ---&&、||、! // var head=postman.getResponseHeader('Server'); // tests[head]=true; // var head2=pm.response.headers.get('Transfer-Encoding'); // tests[head2]=true; // var cooks=postman.getResponseCookie('_login_time').value; // tests [cooks]=true; // var v =postman.getResponseHeader('Server'); 獲取相應頭 // tests[v]=true; // var v1 =pm.response.headers; 獲取相應頭 // tests[v1]=true; // var body=responseBody; 獲取相應正文 // tests[body]=true; // var body2=pm.response.text(); 獲取相應正文 // tests[body2]=true;
六、總結及反思
-
- 實際工作中,斷言庫功能強大好用即可
- json schema可以好好研究利用在接口測試過程中