1.如何判斷接口是否請求成功
2.如何進行接口批量捺萌、定期測試
3.如何處理依賴接口問題(比如商品下單的接口必須要求先登錄)
接口結(jié)果判斷
首先鹿寨,既然是自動化測試新博,那么我們肯定需要工具?(Postman)?或者代碼能幫我們直接判斷結(jié)果是否符合預(yù)期。那么在接口測試上释移,大體就兩個思路:
判斷請求返回的?code?是否符合預(yù)期
判斷請求返回的內(nèi)容中是否包含預(yù)期的內(nèi)容(關(guān)鍵字)
postman:
獲取返回數(shù)據(jù)的頭部信息:postman.getResponseHeader("")
設(shè)置全局變量:postman.setGlobalVariable("variable_key", "variable_value");
snippets中提供的代碼模版
1.Status code : Code is 200
//根據(jù)返回的 Code 判斷請求情況
tests["Status code is 200"] = responseCode.code === 200;?
2.Response body: Contains string
//判斷返回的內(nèi)容中是否存在“關(guān)鍵字”叭披。(tests 的 key 可修改,將不再強調(diào))?
tests["Body matches string"] = responseBody.has("這里可以改為你要判斷的關(guān)鍵字內(nèi)容");
//如上文提到的:
// 判斷結(jié)果中是否存在 access_token 關(guān)鍵字
tests["has access_token"] = responseBody.has("access_token")
?3.Response body: is equal to string
//判斷返回內(nèi)容是否跟預(yù)期完全相等玩讳。
tests["Body is correct"] = responseBody === "這里可以改為你的預(yù)期內(nèi)容";
4.Response body: JSON value check
//上文提到涩蜘,responseBody 為字符串類型,支持轉(zhuǎn)為 Json 格式
var jsonData = JSON.parse(responseBody);
tests["Your test name"] = jsonData.value === 100;
5.Response time is less than 200ms
//判斷請求時長是否小于200ms ,具體時長按情況自定義
tests["Response time is less than 200ms"] = responseTime < 200;
*tests特定寫法熏纯、斷言顯示的內(nèi)容就是【】中的字符串同诫,可隨意編寫
集合(批量)測試
Environment :用于切換接口運行的環(huán)境
Iteration :用于設(shè)置接口一共要運行的次數(shù)。這里我設(shè)置了 3 次樟澜,可以在右邊的 RESULTS 中看出误窖,每個接口都被運行了 3 次。
Delay : 設(shè)置每次運行接口之間的時間間隔秩贰,單位為毫秒霹俺。
Data File : 上傳測試數(shù)據(jù)文件
使用變量
引用一個變量的語法:{{變量名}},我們將賬戶和密碼字段的參數(shù)值都設(shè)置為變量:{{username}} 毒费、{{password}} 丙唧。修改完直接點擊運行 (Send) 當然是不行的,因為目前這兩個變量還未被賦值觅玻,不過我們可以在 Pre-request Script 面板中進行賦值操作:
Pre-request Script
Pre-request Script 與 Tests 類似想际,區(qū)別在于:Pre-request Script 中的腳本是在執(zhí)行請求之前運行,而Tests 中的腳本則是在請求完成之后執(zhí)行溪厘。所以胡本,我們可以在 Pre-request Script 功能區(qū)中用腳本先個上面兩個變量進行賦值,如:
//設(shè)置全局變量
postman.setGlobalVariable("username", "wuhui2224");
postman.setGlobalVariable("password", "123456");
測試數(shù)據(jù)集
Data File?, 在運行集合前的這個選項就是用來上傳測試數(shù)據(jù)(文件)以賦值給相應(yīng)變量的畸悬。我們先以?CSV?格式的測試數(shù)據(jù)為例:
username,password
wuhui2224,123456
zhangsheng,222222
數(shù)據(jù)格式類似表格侧甫,第一行表示對應(yīng)的變量名,下面 2 行表示 2 組賬號密碼數(shù)據(jù)蹋宦,我們保存一份內(nèi)容為上述示例數(shù)據(jù)后綴名為.csv?的文件
定期任務(wù)
Postman?提供了一個?Monitors?(監(jiān)視器)功能闺骚,支持我們提交一個測試任務(wù),安裝設(shè)置的定時器進行運行妆档,如每小時測試一次
請求依賴問題
大部分依賴問題其實本質(zhì)上就是一個接口間數(shù)據(jù)傳遞的問題,比如調(diào)用登錄接口后返回一個標識虫碉,假設(shè)為?token?贾惦,那么我們請求下訂單接口時只要一起攜帶?token?參數(shù)進行請求即可。
1.保證接口調(diào)用順序
2.將接口A返回的數(shù)據(jù)傳遞給后續(xù)的接口B、C须板、D
自定義執(zhí)行順序
當然碰镜,如果只有默認的一個執(zhí)行順序的話,通常沒法滿足我們復(fù)雜的業(yè)務(wù)需求习瑰,所以 Postman 為我們提供了一個函數(shù):postman.setNextRequest("填寫你要跳轉(zhuǎn)的接口名") 绪颖,支持我們跳轉(zhuǎn)到指定接口繼續(xù)執(zhí)行,舉個例子:
我們在運行完 Request1 接口成功后甜奄,不需要再運行 Request2 而是直接跳至 Request3 柠横,那么我可以在 Request1 接口的 Tests 功能區(qū)中執(zhí)行跳轉(zhuǎn)代碼
這里需要注意幾點:
1.postman.setNextRequest() 只在運行集合測試的時候生效,也就是說我們單獨運行 (Send) 接口Request1 時课兄,函數(shù)是不起作用的牍氛。
2.當我們運行集合測試成功從 Request1 -> Request3 后,如果 Request3 后面還有接口烟阐,那么后面的接口仍然繼續(xù)按默認順序執(zhí)行搬俊,即圖中的接口 Request4 仍會被執(zhí)行。
3.指定的跳轉(zhuǎn)接口必須屬于同一個集合中蜒茄。
4.setNextRequest() 函數(shù)不管在 Tests 腳本中何處被調(diào)用唉擂,它都只在當前腳本最后才被真正執(zhí)行。比如我們將圖中的第二行與第一行互調(diào)后檀葛,那么在運行跳轉(zhuǎn)函數(shù)后第二行代碼仍會被執(zhí)行玩祟。
Postman 中的操作
1.我們目錄中已保證 Request1 接口優(yōu)先執(zhí)行
2.Request1 中 Tests 的代碼情況:
if(responseCode.code === 200 && responseBody.has("access_token")){
? //如果 code 為 200, 并且返回的數(shù)據(jù)中存在 access_token 關(guān)鍵字驻谆,則認為登錄成功
? tests["login"] = true;
? //將返回的內(nèi)容轉(zhuǎn)為 json 格式卵凑,并且取到 access_token 內(nèi)容,添加到環(huán)境變量中
? var jsonData = JSON.parse(responseBody);
? //access_token的取值方式視具體的 json 數(shù)據(jù)結(jié)構(gòu)而定
? postman.setEnvironmentVariable("token",jsonData.result.access_token);?
? //跳轉(zhuǎn)到 Request3 接口
? postman.setNextRequest("Request3")
}else{
? tests["login"] = false;
? //登錄失敗胜臊,可以選擇跳轉(zhuǎn)到對應(yīng)失敗后的處理接口進行測試
? //postman.setNextRequest("Other Request")
}
3.在接口?Request3?中使用變量?token 勺卢,具體使用方式時接口參數(shù)規(guī)則而定
原文:https://blog.csdn.net/cai_iac/article/details/81030619