Postman高級應用——流程控制、調試、公共函數、外部數據文件

目錄

流程控制html

調試json

公共函數數組

外部數據文件網絡

 

流程控制

流程控制簡言之就是設置接口的執行順序,流程控制只有在collection runner或Newman裏才生效函數

若是須要實現多個接口的一次循環,只需在每一個接口的Tests中編寫腳本
postman.setNextRequest('下一個接口名');

操做以下圖所示:post

使用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()打印輸出內容操做以下圖所示:spa

 

 使用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中的代碼爲:

//解釋typeof tests[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,不相同fail assertEqual('電話號碼',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,相等fail assertNotEqual('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以及觀察結果
 
注意:當有多個key值,中間用英文,隔開便可,csv文件中第一行的參數名要與發送請求中設置的變量名要一致
舉例爲百度接口,設置好參數,以下圖所示:

 

在左側面板中選中該接口並運行,以下圖所示:

配置參數,以下圖所示:

csv格式文件先製做好,再在運行時添加進來,預覽效果如爲:

 

最終運行效果以下圖所示:

 

本文僅表明做者觀點,系做者@溫一壺清酒發表。
歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。
文章出處:http://www.cnblogs.com/hong-fithing/
相關文章
相關標籤/搜索