Postman高級應用——流程式控制制、調試、公共函數、外部數據文件
流程式控制制
流程式控制制簡言之就是設置介面的執行順序,流程式控制制只有在collection runner或Newman里才生效
如果需要實現多個介面的一次循環,只需在每個介面的Tests中編寫腳本
postman.setNextRequest("下一個介面名");
操作如下圖所示:
使用if進行判斷來結束執行:
我的地盤::創建新列表 -
禪道為介面B中的返回值,在介面B中將其定義成一個全局變數。介面A通過判斷全局變數是否存在進而判斷介面B是否執行。如全局變數存在,將終止執行,否則執行介面B。
postman.setNextRequest("null");是一個終止程序作用
【注意】
1.如果不設終止條件,介面A執行完到介面B,介面B執行完又指向介面A,會構成死循環。該示例中if(globals["我的地盤::創建新列表 -
禪道"])為終止條件。
2.執行前需將用來做判斷的全局變數刪除,否則第一次執行完介面A後就將終止執行。
3.為了更清楚直觀的查看運行結果,最好在每一個介面的Tests中增加一個斷言,否則難以判斷介面A執行的次數
調試
調試有三種方式:
1.使用Ctrl+Alt+c 可以打開Postman的控制台,可以查看請求和響應(只適用於客戶端,不適用於Chrom 插件)
2.用console.log()列印,到控制台看
3.tests["這裡拼出你想看的字元串"] = true在界面/報告看斷言
使用Postman控制台查看,如下圖所示:
使用console.log()列印輸出內容操作如下圖所示:
使用tests["這裡拼出你想看的字元串"] = true,tests並不單單是指設置斷言,也可以是普通的輸出某些信息,如下圖所示:
公共函數
常用的公共函數分為六種,分別是:
1).判斷是否超時(assertNotTimeout):
var hasResponse=postman.getResponseHeader("Content-Type")?true:false;
if(!hasResponse) tests["服務端在超時前沒返回任何數據,請檢查相關服務、網路或反向代理設置(以下跳過其他斷言)"]=false;
2).未超時,顯示發出的請求參數(logParams):
if(hasResponse) tests[`[INFO]
請求參數(超時沒返回時不解析):${JSON.stringify(request.data)}`]=true;
3).未超時,解析返回的JSON對象(getResponseJson):
try{if(hasResponse) var json=JSON.parse(responseBody);}catch(err){
tests["服務端沒返回合法的JSON格式,請檢查相關服務、網路或反向代理設置(以下跳過其他斷言)"]=false; tests[`[INFO]
返回:${responseBody}`]=true; console.error(err);}
4).返回元素的類型(assertType):
var assertType=(name,value,type)=>{let isType=(type==="array")?
Array.isArray(value):typeof value===type;
tests[`${name}為${type}(實際值:${value})`]=isType;};
5).返回元素是否與預期值一致(assertEqual):
var
assertEqual=(name,actual,expected)=>{tests[`${name}等於${expected}(實際值:${actual})`]=actual===expected;};
6).返回元素是否與預期值不一致(assertNotEqual):
var
assertNotEqual=(name,actual,expected)=>{tests[`${name}不等於${expected}(實際值:${actual})`]=actual!==expected;};
為了使用方便,所以將以上函數設置為全局變數,每行一對 key:value 的形式編輯設置成全局變數,如下圖所示:
設置好之後,來使用以上函數,使用時的代碼為:
各函數的具體用法,如下詳解:
①第一個函數和第二個函數一起使用,先判斷是否超時,若未超時,便顯示發出的請求參數,操作如下圖所示:
tests中的代碼為:
②第一個函數和第三個函數一起使用,先判斷是否超時,若未超時,便解析返回的JSON對象,操作如下圖所示:
tests中填入如下代碼:
注意:由於getResponseJson是解析返回的JSON對象,所以介面請求返回的定是JSON才能使用
③返回元素的類型(assertType),操作如下圖所示:
tests中代碼為:
注意:此處需注意的是,數字類型並不是常說的int型,而是number,填入int會一直報錯
返回元素類型的值中代碼:var assertType=(name,value,type)=>{let isType=(type==="array")? Array.isArray(value):typeof value===type; tests[`${name}為${type}(實際值:${value})`]=isType;};
從返回元素類型的值中代碼來看,該代碼是一個三目運算符,重要點在於typeof中的value值,比如輸入該代碼:assertType("數字",1,"number");value為1,type為number,便會執行通過pass,若把type改為int,執行結果只會顯示fail
進行如下操作就能輕而易舉明了,如下所示:
④返回元素是否與預期值一致(assertEqual),相等為true(pass),反之為false(fail),操作如下圖所示:
tests中代碼為:
做簡單的預期結果與實際結果判斷也可如下操作:
⑤返回元素是否與預期值不一致(assertNotEqual),不相等為true(pass),反之為false(fail),操作如下圖所示:
外部數據文件
外部數據文件是Collection Runner在HTTP requests
和script中可以導入CSV文件或是JSON文件,從數據文件(即CSV或JSON文件)中使用values,為了在Postman
UI中去使用它們,你需要遵循和environment or global variables一樣的語法。
操作步驟:
1.在你的Collection request中使用變數,以下的所有變數將會被數據文件中的相應的值替換
2.準備你所需要運行的數據文件(JSON/CSV)
CSV文件要在Collection Runner中工作,第一行必須是在request中要使用的變數名,每一行是一條用例,並表示一次迭代。
JSON文件,你需要確保你的文件有鍵/值對數組。數組中的每個元素是鍵值對的對象,代表了一次迭代。key是作為變數名,values是代替request里的值。
3.打開Collection Runner窗口以及選擇合適的Collection或文件夾
4.選擇「Choose files」,從文件選擇區載入數據文件,如果載入成功,你可以預覽Collection Runner中執行的數據量
5.設置迭代次數。每次迭代都將使用你的數據文件中的一行,如果迭代次數超過數據文件中的行數,將重複執行最後一行
6.運行Collection以及觀察結果
舉例為百度介面,設置好參數,如下圖所示:
在左側面板中選中該介面並運行,如下圖所示:
csv格式文件先製作好,再在運行時添加進來,預覽效果如為:
最終運行效果如下圖所示:
· 學IT,就來中公優就業:http://www.ujiuye.com/
· 2017年【中公教育】特別推出2017年就業促進計劃,500萬就業基金助你成為IT達人
詳情請戳http://www.ujiuye.com/zt/jycj/?wt.bd=bgz
· 什麼?海量IT學習資料白給你都不要?別想了,加群搶:584539956


※Tomcat與OSGi的類載入器架構
※PHP文件系統管理
※Python|應用小案例
※技巧|div內部實現圖片旋轉、放大、縮小、拖拽
※剛畢業,在魔都月薪9000,你也行!
TAG:IT優就業 |