哈嘍,大家好!我是minisummer!首先感謝您的關(guān)注!
今天給大家分享的內(nèi)容是接口測(cè)試必備的postman測(cè)試工具的使用:postman發(fā)送get與post請(qǐng)求,變量的設(shè)置與引用,文件的導(dǎo)入與導(dǎo)出,斷言機(jī)制,參數(shù)化(數(shù)據(jù)驅(qū)動(dòng)),批量執(zhí)行測(cè)試集,環(huán)境變量與全局變量的設(shè)置,定時(shí)器的使用,關(guān)聯(lián)(請(qǐng)求依賴),測(cè)試結(jié)果的導(dǎo)出。
Postman簡(jiǎn)介
下載地址:https://www.getpostman.com/apps
Postman是谷歌開(kāi)發(fā)的一款網(wǎng)頁(yè)調(diào)試和接口測(cè)試工具,能夠發(fā)送任何類型的http請(qǐng)求,支持GET/PUT/POST/DELETE等方法。Postman非常簡(jiǎn)單易用,可以直接填寫URL,header,body等就可以發(fā)送一個(gè)請(qǐng)求,用來(lái)測(cè)試api接口非常方便。
Postman的優(yōu)點(diǎn)
- 使用簡(jiǎn)單,無(wú)需搭建環(huán)境,直接使用,可以快速構(gòu)建請(qǐng)求。
- 保存以供以后回放使用。
- Postman有響應(yīng)結(jié)果的斷言功能,可以用來(lái)寫測(cè)試用例。
- 可以把測(cè)試用例放在同一個(gè)目錄下批量運(yùn)行管理,可以設(shè)置迭代次數(shù)。
- 可以設(shè)置環(huán)境變量,方便測(cè)試環(huán)境和生產(chǎn)環(huán)境使用同一套測(cè)試用例。
- 調(diào)試結(jié)果方便查看。
Postman接口測(cè)試工具的使用
1.創(chuàng)建文件夾
創(chuàng)建文件夾來(lái)保存我們接口請(qǐng)求的數(shù)據(jù)。
同步請(qǐng)求-同步請(qǐng)求數(shù)據(jù)到本地
抓包圖標(biāo)-使用Postman抓取API請(qǐng)求和cookie
設(shè)置圖標(biāo)-應(yīng)用程序設(shè)置
通知圖標(biāo)-接收通知或廣播
分享圖標(biāo)
賬戶管理
2.完成get請(qǐng)求和post請(qǐng)求
Get請(qǐng)求:參數(shù)在params里設(shè)置。
Post請(qǐng)求:參數(shù)在body里設(shè)置。
方式一:表單提交,在body中選擇x-www-form-urlencoded
等價(jià)于application/x-www-from-urlencoded,會(huì)將表單內(nèi)的數(shù)據(jù)轉(zhuǎn)換為鍵值對(duì)。
方式二:row傳參
可以上傳任意格式的文本,可以上傳text、json、xml、html等,一般消息主體是序列化的JSON字符串。
方式三:Form-data 傳參
就是http請(qǐng)求中的multipart/form-data,它會(huì)將表單的數(shù)據(jù)處理為一條消息,以標(biāo)簽為單元,用分隔符分開(kāi)。既可以上傳鍵值對(duì),也可以上傳文件。
設(shè)置參數(shù)
設(shè)置參數(shù)可以使用bulk edit模式和Key-value edit模式。
3.導(dǎo)出和導(dǎo)入接口文件
4.斷言(檢查點(diǎn))
Postman添加響應(yīng)處理,通過(guò)檢查響應(yīng)數(shù)據(jù)是否符合預(yù)期來(lái)判斷用例是否通過(guò)。
Postman提供了很多常用斷言方式:比如對(duì)響應(yīng)狀態(tài)碼、響應(yīng)內(nèi)容等進(jìn)行斷言。
常見(jiàn)斷言代碼
參考文章:https://blog.csdn.net/qq_37775060/article/details/79498591
//判斷返回狀態(tài)碼為200
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
//判斷返回元素中含有ok
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("OK");
});
//判斷返回json數(shù)據(jù)中某個(gè)鍵對(duì)應(yīng)的值,Your test name表示這個(gè)測(cè)試片段的名稱,可以自己任意定義;jsonData.value表示響應(yīng)json串中的某個(gè)鍵,
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
//判斷響應(yīng)內(nèi)容是否和預(yù)期內(nèi)容完全一致
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
//檢查content-Type是否包含在header返回
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
//響應(yīng)時(shí)間小于200ms
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
//成功的POST請(qǐng)求狀態(tài)碼
pm.test("Successful POST request", function () {
pm.expect(pm.response.code).to.be.oneOf([201,202]);
});
//狀態(tài)碼:代碼中有指定字符串Created
pm.test("Status code name has string", function () {
pm.response.to.have.status("Created");
});
//response body:將XML轉(zhuǎn)換為JSON對(duì)象
var jsonObject = xml2Json(responseBody);
5.將接口文件轉(zhuǎn)化為不同的代碼
6.參數(shù)化(數(shù)據(jù)驅(qū)動(dòng))
在環(huán)境中設(shè)置參數(shù),為參數(shù)設(shè)置不同的值。
參數(shù)格式:{{參數(shù)名稱}}
文檔參數(shù)化:Postman支持Json文檔,txt文檔,CSV文檔
7.迭代
Runner中設(shè)置迭代,對(duì)接口進(jìn)行批量測(cè)試,可以對(duì)文件夾中的所有接口進(jìn)行批量測(cè)試。
集合:即是postman中的Collections,類似文件夾,可以把同一個(gè)項(xiàng)目的請(qǐng)求放在一個(gè)集合里方便管理和分享。測(cè)試人員下次測(cè)試可以直接從集合中找到要執(zhí)行的測(cè)試case??梢宰寙蝹€(gè)的request分組到一起,對(duì)每個(gè)request都有很多個(gè)testcase,都分組收藏到集合里面,進(jìn)行自動(dòng)化測(cè)試和回歸測(cè)試。如果想將自己的集合分享給團(tuán)隊(duì)內(nèi)其他人,可以點(diǎn)擊Share按鈕進(jìn)行分享。
1.創(chuàng)建測(cè)試集:在左側(cè)面板下點(diǎn)擊New collections按鈕。
2.創(chuàng)建多條測(cè)試用例,點(diǎn)擊左側(cè)save按鈕,保存到創(chuàng)建的測(cè)試集中。
3.點(diǎn)擊測(cè)試用例集邊上右邊的run按鈕,或者頂部菜單欄的Runner進(jìn)行運(yùn)行。
4.選擇環(huán)境信息、迭代次數(shù)、請(qǐng)求的等待時(shí)間。
5.運(yùn)行結(jié)果。
8.環(huán)境變量和全局變量
接口測(cè)試時(shí),為了方便修改和管理環(huán)境和參數(shù),我們會(huì)把域名信息和請(qǐng)求的固定參數(shù)設(shè)為環(huán)境變量,把接口參數(shù)的請(qǐng)求或者返回參數(shù)中的固定值設(shè)為全局變量。
全局變量
代碼設(shè)置全局變量:在tests模塊設(shè)置。
pm.globals.set("variable_key", "variable_value");
可視化設(shè)置全局變量:小眼睛—global—edit
進(jìn)入對(duì)應(yīng)界面后,便可直接進(jìn)行管理
多環(huán)境區(qū)分與切換
通常情況下,我們的接口都會(huì)分為測(cè)試版本和線上版本(或者更多),而他們的區(qū)別可能僅是 ULR 不同,那么全局變量便不大合適解決這個(gè)問(wèn)題。
代碼設(shè)置環(huán)境變量:
//注意,該參數(shù)只添加到你當(dāng)前選擇的環(huán)境的“參數(shù)集”中
postman.setEnvironmentVariable("variable_key", "variable_value");
使用環(huán)境及變量:{{name}}
9.定時(shí)任務(wù)(監(jiān)控器)
參考文章:https://blog.csdn.net/cai_iac/article/details/81030619?utm_source=blogxgwz9
Postman 提供了一個(gè) Monitors (監(jiān)視器)功能,支持我們提交一個(gè)測(cè)試任務(wù),按照設(shè)置的定時(shí)器進(jìn)行運(yùn)行,如每小時(shí)測(cè)試一次,具體操作如下:
10.請(qǐng)求依賴(關(guān)聯(lián))
接口與接口之間可能會(huì)有數(shù)據(jù)依賴的問(wèn)題。比如購(gòu)物下單接口需要依賴登錄接口返回的一個(gè)標(biāo)識(shí)token,那么我們請(qǐng)求下訂單接口時(shí)只要一起攜帶 token 參數(shù)進(jìn)行請(qǐng)求即可。所以問(wèn)題變?yōu)椋罕WC接口調(diào)用順序。
即將接口A返回的數(shù)據(jù)傳遞給后續(xù)的接口B、C、D。
10.1接口默認(rèn)執(zhí)行順序
接口的執(zhí)行順序其實(shí)就是按照這邊目錄中的順序(從上到下),即: Request1 -> Request2 -> Request3。
10.2自定義執(zhí)行順序
默認(rèn)執(zhí)行順序通常沒(méi)法滿足我們復(fù)雜的業(yè)務(wù)需求,postman.setNextRequest("填寫你要跳轉(zhuǎn)的接口名") ,支持我們跳轉(zhuǎn)到指定接口繼續(xù)執(zhí)行,舉個(gè)例子:跳過(guò)運(yùn)行request2
自定義執(zhí)行順序需要注意幾點(diǎn)
- postman.setNextRequest() 只在運(yùn)行集合測(cè)試的時(shí)候生效,也就是說(shuō)我們單獨(dú)運(yùn)行 (Send) 接口Request1 時(shí),函數(shù)是不起作用的。
- 當(dāng)我們運(yùn)行集合測(cè)試成功從 Request1 -> Request3 后,如果 Request3 后面還有接口,那么后面的接口仍然繼續(xù)按默認(rèn)順序執(zhí)行,即圖中的接口 Request4 仍會(huì)被執(zhí)行。
- 指定的跳轉(zhuǎn)接口必須屬于同一個(gè)集合中。
- setNextRequest() 函數(shù)不管在 Tests 腳本中何處被調(diào)用,它都只在當(dāng)前腳本最后才被真正執(zhí)行。比如我們將圖中的第二行與第一行互調(diào)后,那么在運(yùn)行跳轉(zhuǎn)函數(shù)后第二行代碼仍會(huì)被執(zhí)行。
所以,利用 setNextRequest() 函數(shù),我們便可以按照條件跳過(guò)不必要的接口,或者建立我們自己的一個(gè)邏輯測(cè)試。
10.3 解決依賴問(wèn)題
掌握以上的預(yù)備知識(shí)后,我們開(kāi)始看看如何用 Postman 解決存在依賴關(guān)系的接口測(cè)試。
假設(shè)場(chǎng)景
我們的接口 Request1 為登錄接口,登錄成功將會(huì)返回一個(gè) access_token 字段作為標(biāo)識(shí)(已實(shí)現(xiàn))。那么假設(shè)接口 Request3 為一個(gè)下訂單的接口,需要攜帶登錄返回的 access_token 才能正常訪問(wèn)。
思路
保證 Request1 在 Request3 之前被運(yùn)行
將 Request1 返回的 access_token 的值添加到環(huán)境變量"參數(shù)集"中。
Request3 在請(qǐng)求時(shí)引用 access_token 的值
將返回值存在 “全局變量” 或者 “環(huán)境變量” 中,視具體業(yè)務(wù)情況而定,該例中 access_token 的值是與環(huán)境有關(guān)的,所以這里選擇使用環(huán)境變量集存儲(chǔ)。
Postman 中的操作
我們目錄中已保證 Request1 接口優(yōu)先執(zhí)行
Request1 中 Tests 的代碼情況:
if(responseCode.code === 200 && responseBody.has("access_token")){
//如果 code 為 200, 并且返回的數(shù)據(jù)中存在 access_token 關(guān)鍵字,則認(rè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)到對(duì)應(yīng)失敗后的處理接口進(jìn)行測(cè)試
//postman.setNextRequest("Other Request")
}
}
運(yùn)行并查看結(jié)果
運(yùn)行集合測(cè)試,可以看到我們結(jié)果符合我們的預(yù)期,Request1 和 Request3 通過(guò)測(cè)試,Request2 被跳過(guò),Request4 仍被執(zhí)行。
11.導(dǎo)出測(cè)試結(jié)果
請(qǐng)大家多多指教~
以上內(nèi)容希望對(duì)你有幫助,有被幫助到的朋友歡迎點(diǎn)贊,評(píng)論。
注:轉(zhuǎn)載請(qǐng)注明出處,商用請(qǐng)征得作者本人同意,謝謝?。?!