Postman高階應用——流程控制 除錯 公共函式 外部資料檔案
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
postman客戶端下載地址:https://www.getpostman.com/apps
流程控制
流程控制簡言之就是設定介面的執行順序,流程控制只有在collection runner或Newman裡才生效
如果需要實現多個介面的一次迴圈,只需在每個介面的Tests中編寫指令碼
postman.setNextRequest('下一個介面名');
操作如下圖所示:
使用if進行判斷來結束執行:
if(globals["我的地盤::建立新列表 - 禪道"])postman.setNextRequest("null");tests["執行完畢!"] = responseCode.code ===200;
我的地盤::建立新列表 - 禪道為介面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 的形式編輯設定成全域性變數,如下圖所示:
設定好之後,來使用以上函式,使用時的程式碼為:
eval(globals.assertNotTimeout);//判斷是否超時eval(globals.logParams);//未超時,顯示發出的請求引數eval(globals.getResponseJson);//未超時,解析返回的JSON物件eval(globals.assertType);//返回元素的型別eval(globals.assertEqual);//返回元素是否與預期值一致eval(globals.assertNotEqual);//返回元素是否與預期值不一致
各函式的具體用法,如下詳解:
①第一個函式和第二個函式一起使用,先判斷是否超時,若未超時,便顯示發出的請求引數,操作如下圖所示:
tests中的程式碼為:
eval(globals.assertNotTimeout);eval(globals.logParams);
②第一個函式和第三個函式一起使用,先判斷是否超時,若未超時,便解析返回的JSON物件,操作如下圖所示:
tests中填入如下程式碼:
eval(globals.assertNotTimeout);eval(globals.getResponseJson);tests[json.expires_in] = 7200;
注意:由於getResponseJson是解析返回的JSON物件,所以介面請求返回的定是JSON才能使用
③返回元素的型別(assertType),操作如下圖所示:
tests中程式碼為:
eval(globals.assertType);//assertType=(name,value,type);//name為返回的元素key,value為該元素的值,type為該元素的型別assertType('姓名','boss','string');assertType('暱稱','一壺清酒','string');assertType('數字',1,'number');
注意:此處需注意的是,數字型別並不是常說的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
進行如下操作就能輕而易舉明瞭,如下所示:
tests中的程式碼為:
//解釋typeoftests[typeof 'hello'] =true;//返回出來的是string,值的型別tests[typeof 1] =true; //返回出來的是number
④返回元素是否與預期值一致(assertEqual),相等為true(pass),反之為false(fail),操作如下圖所示:
tests中程式碼為:
eval(globals.assertNotTimeout);eval(globals.getResponseJson);eval(globals.assertEqual);//assertEqual=(name,actual,expected);//name為返回的元素key,actual為返回的實際值,expected為預期值assertEqual('expires_in',json.expires_in,7200);assertEqual('expires_in',json.expires_in,7100);
做簡單的預期結果與實際結果判斷也可如下操作:
eval(globals.assertEqual);//assertEqual=(name,actual,expected);//name為返回的元素key,actual為返回的實際值,expected為預期值//號碼相同pass,不相同failassertEqual('電話號碼',18867210313,18867210313);assertEqual('電話號碼',18867210310,18867210313);
⑤返回元素是否與預期值不一致(assertNotEqual),不相等為true(pass),反之為false(fail),操作如下圖所示:
tests中程式碼如下
eval(globals.assertNotTimeout);eval(globals.getResponseJson);eval(globals.assertNotEqual);//assertNotEqual=(name,actual,expected);//name為返回的元素key,actual為返回的實際值,expected為預期值//號碼不相等pass,相等failassertNotEqual('expires_in',json.expires_in,7100);assertNotEqual('expires_in',json.expires_in,7200);
外部資料檔案
外部資料檔案是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格式檔案先製作好,再在執行時新增進來,預覽效果如為:
最終執行效果如下圖所示:
原文地址:http://www.cnblogs.com/hong-fithing/p/7601859.html
.NET社群新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注