提取接口返回值
1、獲取響應的header值
var Content-Type = postman.getResponseHeader("Content-Type");
2、獲取響應的cookie值
var xsrfCookie = postman.getResponseCookie("csrf_token");
3、獲取響應的正文
var response = responseBody;
4、使用正則表達式截取響應部分內容,通過要截取的字符串左右邊界截取
var str = (responseBody.match(new RegExp('"expires_in":(.+?)}')))[1];
5、返回的是json數據,可以通過轉換成json對象然后解析
var responseDate =JSON.parse(responseBody); responseDate.expires_in
6、轉化XML格式的響應成JSON對象---Convert XML body to a JSON object
var jsonObject = xml2Json(responseBody);
接口關聯(串行傳參)
微信公眾平台開發者文檔中,創建用戶分組接口需要獲取access token接口返回的access_token值才能進行創建分組,之前我們使用的方式是先執行獲取access token接口,得到值后,然后復制到創建用戶分組接口。
上述做法不能完成接口自動化操作,只能手工逐個去執行,我們可以利用postman的相關功能組合完成獲取access token接口的返回值送給創建用戶分組接口,該過程稱為接口關聯。
操作如下:
1、利用postman獲取上一個接口指定的返回值
2、使用postman全局變量保存上一個接口的值,代碼如下:
postman.setGlobalVariable("access_token", str);
//其中前面的參數為全局變量名稱, 后面為js變量
3、和之前引用全局變量一樣,使用{{access_token}}即可。
備注:由於有關聯關系,所以兩個接口要順序執行才能互相之間傳遞數據。
設置動態參數
在runner里循環發n次請求/做自動化測試時,有些接口不適合寫死參數:
1.Postman有以下內建變量,適合一次性使用:
{{$guid}}//生成GUID
{{\(timestamp}}//當前時間戳 {{\)randomInt}}//0-1000的隨機整數
設置順序值代碼:
var j = parseInt(globals.i);
j = j + 1;
postman.setGlobalVariable("i",j);
2.參數依賴上一個請求的返回:
上個請求的Tests里提取參數存環境變量,這個請求里用{{變量名}}取值
3.參數每次都不同,但之后的斷言或別的請求里可能還要用:
在Pre-request Script里寫代碼處理,存為環境變量,參數里用{{變量名}}取值
Pre-request Script為執行接口請求之前要做的操作,而tests是執行完請求要做的操作。內建變量一般放在Request里,我們也可以用代碼在Pre-request Script 中實現,用代碼實現的好處是可以復用。
舉例如下:
時間戳實現:
var times = Date.now();
postman.setGlobalVariable("timess", times);
guid實現:
const guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
.replace(/x/g, () => (Math.floor(Math.random() * 16)).toString(16))
.replace(/y/g, () => (Math.floor(Math.random() * 4 + 8)).toString(16));
隨機整數實現:
const randomInt = (min, max) => Math.floor(Math.random() * (max -min + 1)) + min;
postman.setGlobalVariable("nums",randomInt(0,1000));
從多個選項中選擇實現:
const getRandomValue = list => list[randomInt(0, list.length -1)];
const charsInName = ['王','李','張'];
postman.setGlobalVariable("options",getRandomValue(charsInName));
順序取值實現:
var s = postman.getGlobalVariable("num");
s = parseInt(s) + 1;
postman.setGlobalVariable("num",s);
隨機手機號實現:
environment.randomMobile = `18${randomInt(100000000, 999999999)}`;
同步等待實現:
const sleep = (milliseconds) => {
const start = Date.now();
while (Date.now() <= start + milliseconds) {}
};
流程控制
流程控制只有在collection runner或Newman里才生效
假設2個接口的順序為:接口A-->接口B
接口A:https://www.baidu.com/s?wd=海賊王
接口B:https://www.baidu.com/s?wd=海賊王路飛
如果希望執行順序為:接口A -> 接口B -> 接口A,又不想復制一份接口A,那么在接口A的Teses中編寫腳本:
if(globals["wd"] == "海賊王路飛——百度搜索")
{
postman.setNextRequest("null");
postman.setGlobalVariable("wd","first");
}
tests["A接口執行"]=true;
wd為接口B中的返回值,在接口B中將其定義成一個全局變量。接口A通過判斷全局變量是否正確進而判斷接口B是否執行。如全局變量判斷正確,將終止執行,否則執行接口B。
接口B的Teses中編寫腳本:
var str = (responseBody.match(new RegExp('<title>(.+?)</title>')))[1];
tests["B接口執行"] = true;
postman.setGlobalVariable("wd",str);
postman.setNextRequest("A接口");
“A接口”為A接口的名稱。如果需要實現多個接口的一次循環,只需在每個接口的 Tests中編寫腳本“postman.setNextRequest('下一個接口名');”
調試
1.使用 Ctrl+Alt+c 可以打開Postman的控制台,可以查看請求和響應(只適用於客戶端,不適用於Chrom 插件)
2.用console.log()打印,到控制台看
3.tests['這里拼出你想看的字符串'] = true在界面/報告看斷言
定義公共函數
常用公共函數:
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 的形式編輯設置成全局變量,如下圖所示:
全局變量設置完成后就可以引用這些公共函數了
頁面訪問請求:
https://api.weixin.qq.com/cgibin/groups/create?access_token=ACCESS_TOKEN
該接口請求方式:POST 在Body中填寫json數據:
{"group":{"name":"test"}}
在Tests中編寫腳本,如下圖所示:
需要執行的測試用例可寫在Tests的if語句中:
assertType=(name,value,type);
name為用例的名稱,value為該元素的值,type為該元素的類型,如:
assertType('name類型判斷',json.name,string);//用例執行成功
assertEqual=(name,actual,expected);
name為用例的名稱,actual為返回的實際值,expected為預期值,如:
assertEqual('是否name正確',json.name,'newdreama');//用例執行成功
assertNotEqual=(name,actual,expected);
name為用例的名稱,actual為返回的實際值,expected為預期值
assertNotEqual('是否name正確',json.id,107);//用例執行成功
外部數據文件
你可以在Collection Runner中使用數據變量去運行不同的數據,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中執行的數據量,通過選擇Data File Type選擇文件類型,然后 點擊Preview來預覽數據。
5.設置迭代次數。每次迭代都將使用你的數據文件中的一行,如果迭代次數超過 數據文件中的行數,將重復執行最后一行
6.運行Collection以及觀察結果
備注:
導入的外部數據文件,通過兩種方式傳遞到postman參數中, 在HTTP requests中可以使用{{ keyword }}去引用
在script中可以使用data. keyword 或者data[”keyword “] 去引用
如果一定要在test里取請求參數里填的東西,比如傳JSON字符串就用 JSON.parse(request.data).phone
如果是form就用request.data.phone
Newman簡介
- Newman是為Postman而生,專門用來運行Postman編寫好的腳本
- 使用Newman,你可以很方便的用命令行來執行postman collections
- Newman鞏固了Postman接口測試神器的地位
Newman的安裝
1.先下載Node.js
https://nodejs.org/en/
2.安裝NodeJs(很容易安裝,這里不多做介紹)
3.打開cmd,輸入node,如果沒有報錯,而是顯示“>”,說明node安裝成功。
4.安裝npm (如果nodejs自帶,可以省略)
打開cmd,輸入npm install --global --production windows-build-tools
安裝這些依賴需要一些時間,耐心等待安裝完成。
5.然后安裝NewMan
打開cmd,輸入npm install -g newman
6.通過查看newman版本測試安裝是否成功,打開cmd,輸入newman -v,出 現版本信息即安裝成功
Newman的使用
1.執行collection
格式:newman run {json filesource}//絕對路徑比較准確 //(Windows系統后面不需要分號,linux系統需要)
例如:newman run C:\Users\xingzheng\Desktop\dafmng-api.json
2.直接發送一個request
3.設置跑測試的輪數
4.設置數據文件
5.保存output到文件