針對一個接口,我們在知道參數以及參數對應的結果時,可以通過postman進行判斷,驗證返回數據是否與預期數據相等。這樣可以使我們的接口測試更加的方便簡潔。
1、准備數據。
postman可以接受的文件格式如圖所示,一般來說可以將我們需要進行參數化的數據存儲在excel表格中,如下圖所示,postman在讀取數據的時候,根據第一行的列名讀取,並且在excel,針對多個參數可以使用逗號隔開,沒有txt那么麻煩。
圖中,city和income是接口需要的參數,Insurance_ability和score是預期的返回的值,當然也可以跟接口返回的參數名不對應。
postman中讀取數據的時候,會將表名默認的認為是data。所以在讀取數據的時候,比如讀取city這一列的數據,則書寫為data.city。postman會按照data.city的讀取方式讀取數據直到數據為空。
需要注意的是:使用excel保存的數據,在保存的時候請另存為csv格式,並且使用Notepad++將其轉換為utf-8的格式,不然在postman中識別是亂碼格式,對數據的判斷造成失誤。
2、postman參數設置
此接口中,我們需要參數化的參數是city和income,針對這兩個參數,使用{{}}包括。
3、請求發送前,參數設置
我們是需要對表格中的數據進行參數化,所在在發送請求之前,我們要讓postman能夠讀取到文件中的數據,在postman中,Pre-request Script中的語句postman會在請求發送之前執行,所以讀取語句的操作,我們放在這里執行。
代碼語句進行讀取操作。
var city = data.city;
var income =data.income;
4、在Tests中進行判斷操作
第四步應該是最重要的操作,現在我們已經在發送請求之前讀取了文件的數據,那么該如何進行判斷呢?這步我們在Tests中進行,Tests會在請求之后執行,Tests也稱之為斷言。
如何去判斷返回的數據是否正確的思維是:
1、將文件中的預期結果設置為環境變量
2、獲取返回的數據
3、進行判斷
var score=(data.score);//獲取文件中數據 var Insurance_ability=(data.Insurance_ability);//設置成環境變量 pm.environment.set("score",score); pm.environment.set("Insurance_ability",Insurance_ability); if(tests["code is 200"]=responseCode.code===200){ //[postman斷言輸出,返回200打印code is 200 var d = JSON.parse(responseBody); //將返回數據解析成json格式 if( d.得分==score&&d.保險能力==Insurance_ability){ //將返回數據與環境變量進行對比,如果同時滿足 var a=1; //因為pm.test語句中含有function()設置滿足條件是a=1, pm.test("測試通過",function(){ //if中判斷為真,則斷言輸入測試通過 if(a==1); }); } else{ var a=0; pm.test("測試不通過",function(){ if(a===0); }); } }else if(tests["code is 500"]=responseCode.code===500){//狀態為500時斷言輸出 }else{ tests["code is 400"]=responseCode.code===400 //狀態為400時斷言輸出 }
5、參數化執行
以上工作准備完成之后,我們就可以開始正式的參數化執行了
1、點擊Runner
2、接口選擇,環境准備,選擇文件
3、點擊Run,開始執行
4、檢查執行結果
在數據跑完之后,我們可以直接在頁面看到結果,其中pass和failed是代碼tests中斷言通過的數量,其中,我們可以看到測試通過,和code is 200的提示,
我們看到failed數量為1,我們找到該請求
看到coed is 200 狀態為FALL,coed is 500狀態為pass, 可以判斷該請求狀態碼是500
此時就可以查看該請求的請求地址和返回參數,再對比數據,查看具體是哪里的錯誤。
tests["測試通過"]=true; //設置為true,運行時表示pass tests["測試不通過"]=false; //設置為false,運行時表示fail
實現整個判斷的語句如下:
var city = data.city; var income =data.income; var score=(data.score); var Insurance_ability=(data.Insurance_ability); pm.environment.set("score",score); pm.environment.set("Insurance_ability",Insurance_ability); var d = JSON.parse(responseBody); if(d.得分==score&&d.保險能力==Insurance_ability){ tests["測試通過"]=true; }else{ tests["測試不通過"+"(輸入參數"+city+'、'+income+")預期結果(得分="+score+"、保險能力"+Insurance_ability+")(實際結果得分="+d.得分+"、保險能力="+d.保險能力+')']=false; }
如圖,數據表中,存在19個用例,通過17個,失敗兩個,並且針對失敗的用例,清晰的可以看到參數、預期結果以及返回結果。
如果數據較多的時候,我們可以直接通過運行結果頁面的紅色方塊(失敗區域)展示的用例查找失敗的數據。
代碼更新:
針對接口出現的問題,簡要的分為三種情況,服務器問題、客戶端問題、數據校驗,所以更新了一下驗證代碼
var state=responseCode.code;//獲取返回狀態 var number=(state.toString()).substr(0,1);//將返回的number類型轉為string類型,並獲取第一位 switch(number){ case '2': test(); break; case '4': clientQue(); //4開頭的狀態,簡單定義為客戶端問題 break; case '5': serverQue(); //5開頭的狀態,簡單定義為服務器問題 break; default: tests['測試不通過,狀態='+state]=false; //如出現其他情況,則打印狀態,並測試不通過 break; } function test(){ //狀態為200執行的函數 var city = data.city; var income =data.income; var score=(data.score); //可使用request。url獲取url,解析參數字段 var Insurance_ability=(data.Insurance_ability); var result = JSON.parse(responseBody); if(result.得分==score&&result.保險能力==Insurance_ability){ tests["測試通過"]=true; }else{ tests["測試失敗"+"(輸入參數"+city+'、'+income+")預期結果(得分="+score+"、保險能力"+Insurance_ability+")(實際結果得分="+result.得分+"、保險能力="+result.保險能力+')']=false; } } //客戶端問題 function clientQue(){ tests['客戶端問題(請求參數或方式錯誤)---測試失敗---狀態碼為'+state+' requestURl為'+request.url]=false; } //服務器或者網關問題 function serverQue(){ tests['服務器或網關問題---測試失敗---狀態碼為'+state+' requestURl為'+request.url]=false; }