本文鏈接:https://blog.csdn.net/hqsary/article/details/81940077
————————————————
針對一個接口,我們在知道參數以及參數對應的結果時,可以通過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
此時就可以查看該請求的請求地址和返回參數,再對比數據,查看具體是哪里的錯誤。
打開請求地址和返回內容,可以看到是參數我們傳遞錯了,該原因應該是我表格中這行數據為空,所以他直接傳遞的{{ciry}}和{{income}},
總結
以上就是如何使用postman判斷返回結果是否正確的左右過程,如果有任何寫的不好的地方,望指教。
除此之外,也遇到問題,比如在數據量大的時候,再去對比結果,就會比較麻煩,並且tests中的輸出只是一個斷言輸出,無法通過該運行的通過或者不通過去判斷有多少用例失敗,所以這個是還需要研究的。
大家也可以通過在tests中的各種操作和打印使得自己能通過判斷輸出就判斷出是哪里數據的問題。
更新
小編寫了一個小時的更新,按了下谷歌的control+s,頁面就崩, 小編很無奈,只能重新寫。
之前我們已經實現了對預期數據和返回數據做一個基本的判斷,但是不能簡要的從運行結果查看到是通過了多少測試用例數據,沒有通過多少測試用例數據,並且去查找錯誤數據的時候還是很麻煩。
查閱資料發現,針對tests語句,我們是可以設置他的結果的,就是設置通過或者不通過,所以我們新的思路就是:
1、對預期結果和返回結果進行判斷
2、判斷相等則設置tests語句為true
3、判斷不相等則設置tests語句為false,即失敗,並且打印參數、預期結果、實際結果,這樣我們簡要的從runner運行界面就知道我們那些數據不對,就不用花大量的時間查找那些數據出錯。
語句如下:
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; }