1. 程式人生 > >Postman高階應用——流程控制 除錯 公共函式 外部資料檔案

Postman高階應用——流程控制 除錯 公共函式 外部資料檔案

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

postman客戶端下載地址:https://www.getpostman.com/apps

流程控制

流程控制簡言之就是設定介面的執行順序,流程控制只有在collection runner或Newman裡才生效

如果需要實現多個介面的一次迴圈,只需在每個介面的Tests中編寫指令碼

postman.setNextRequest('下一個介面名');

操作如下圖所示:

640?wx_fmt=png&wxfrom=5&wx_lazy=1

使用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控制檯檢視,如下圖所示:

0?wx_fmt=png

使用console.log()列印輸出內容操作如下圖所示:

0?wx_fmt=png

 

 使用tests['這裡拼出你想看的字串'] = true,tests並不單單是指設定斷言,也可以是普通的輸出某些資訊,如下圖所示:

0?wx_fmt=png

公共函式

常用的公共函式分為六種,分別是:

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 的形式編輯設定成全域性變數,如下圖所示:

0?wx_fmt=png

設定好之後,來使用以上函式,使用時的程式碼為:

eval(globals.assertNotTimeout);//判斷是否超時eval(globals.logParams);//未超時,顯示發出的請求引數eval(globals.getResponseJson);//未超時,解析返回的JSON物件eval(globals.assertType);//返回元素的型別eval(globals.assertEqual);//返回元素是否與預期值一致eval(globals.assertNotEqual);//返回元素是否與預期值不一致

各函式的具體用法,如下詳解:

①第一個函式和第二個函式一起使用,先判斷是否超時,若未超時,便顯示發出的請求引數,操作如下圖所示:

0?wx_fmt=png

tests中的程式碼為:

eval(globals.assertNotTimeout);eval(globals.logParams);

②第一個函式和第三個函式一起使用,先判斷是否超時,若未超時,便解析返回的JSON物件,操作如下圖所示:

0?wx_fmt=png

tests中填入如下程式碼:

eval(globals.assertNotTimeout);eval(globals.getResponseJson);tests[json.expires_in] = 7200;

注意:由於getResponseJson是解析返回的JSON物件,所以介面請求返回的定是JSON才能使用

 ③返回元素的型別(assertType),操作如下圖所示:

0?wx_fmt=png

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

進行如下操作就能輕而易舉明瞭,如下所示:

0?wx_fmt=png

tests中的程式碼為:

//解釋typeoftests[typeof 'hello'] =true;//返回出來的是string,值的型別tests[typeof 1] =true;     //返回出來的是number

④返回元素是否與預期值一致(assertEqual),相等為true(pass),反之為false(fail),操作如下圖所示:

0?wx_fmt=png

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),操作如下圖所示:

0?wx_fmt=png

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以及觀察結果

 

舉例為百度介面,設定好引數,如下圖所示:

 0?wx_fmt=png

在左側面板中選中該介面並執行,如下圖所示:

0?wx_fmt=png

配置引數,如下圖所示:

0?wx_fmt=png

csv格式檔案先製作好,再在執行時新增進來,預覽效果如為:

 0?wx_fmt=png

最終執行效果如下圖所示:

0?wx_fmt=png


   

原文地址:http://www.cnblogs.com/hong-fithing/p/7601859.html


.NET社群新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

640?wx_fmt=jpeg

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述