利用Postman和Jmeter進行接口性能測試
作者:ZBW
版本:v1.1
在Phylab的開發過程中,對於生成報告接口的性能考量十分重要。原有的Latex接口雖然生成的報告美觀,但編譯Latex模板的速度一直不盡人意。除此之外往屆同學也出現過由於多人同時生成報告造成網站崩潰的情況。因此上一階段我們着手開發了基於Markdown模板的報告生成接口。開發結束之后,如何考量兩個接口的性能成為了我們需要關注的問題。
由於測試者對Postman較為熟悉,我們首先嘗試使用Postman進行性能測試,但由於其功能有限,隨后我們又使用Jmeter進行了並發方面的測試。因此以下將簡單介紹這兩款工具的使用。
Postman
Postman是一款強大的API測試工具,能夠向服務器發起復雜的http請求,其請求頭、請求體以及Cookie等都可以通過簡單清晰的方式定制。結合額外的瀏覽器插件,Postman還可記錄瀏覽器發生的請求。從而成為了編寫腳本的好幫手
安裝
以下介紹Postman的Chrome瀏覽器App,其最大的優點是結合Postman Interceptor瀏覽器插件,無需額外配置即可捕捉瀏覽器正在發起的請求。(Postman本地應用需要額外配置瀏覽器代理信息)
缺點是此Chrome App已經處於停滯開發的狀態,啟動時會收到Deprecated的警告。但由於本文涉及的功能較為簡單,所以暫時不考慮此問題。
下載鏈接:Chrome app, Postman Interceptor
簡單使用
1. 啟動程序
(1) 啟動Postman Interceptor的接收狀態,其中的輸入框可以通過正則表達式過濾請求域名。
(2) 打開Postman app
左側是軟件發起過以及記錄瀏覽器發起的請求列表,右側是單個請求的詳細信息。
2. 構造並發起測試請求
(1) 輸入請求相關信息
測試的第一步是構造請求,可以在右側的長條狀欄內輸入請求指向的API,並指定請求的類型。之后填寫下方的請求詳細信息。
(2) 使用瀏覽器Cookie(使用Interceptor捕獲請求)
這里我們的問題是被測接口需要登陸才能使用,而直接由Postman發起的請求默認是不帶有任何額外Cookie的,請求結果是Unauthorized。因此這里的簡便方法是在登陸網站后在瀏覽器端點擊生成報告,並通過interceptor獲取瀏覽器發起的請求,此時請求內包含了登陸的Cookie信息。
在瀏覽器發起請求后,Postman會直接記錄下請求的詳細信息。由於在瀏覽器上填好數據后點擊生成報告,捕獲的請求信息中已經包含了測試接口所需的數據。
(3) 發送及保存請求
最后點擊Send即可發送請求,並在面板下方看到請求的結果。
可以將請求保存到Collection中備用。
3. 使用Runner功能進行自動測試
Postman提供了Runner功能,可以自動運行Collection中的所有測試。
(1) 啟動
點擊界面右上角的Runner打開相應界面。其中在Runs下可以選擇需要運行的collection。左側可查看之前的測試結果。
(2)參數配置
中間部分主要用到參數的為Iteration,代表測試重復的次數;Delay代表每次重復之間的間隔;Data File部分可以上傳相應的數據文件。
(3) 運行測試查看結果
點擊Run便可運行測試。
例如我們測試Markdown生成接口的平均耗時,可設置Iteration為10,運行后可以看到每次請求返回的時間及狀態碼。
可通過Export Test Result導出結果查看具體的報告。
Jmeter進行並發測試
Postman的一大缺點是其只能串行運行測試,而不能並行測試,從而無法測量服務器的並發性能。因此我們開始考慮使用更復雜的工具Jmeter來測試。Jmeter是由Apache基金會旗下的一款負載測試軟件,我們僅僅應用了其中的HTTP請求測試,而實際上該軟件還可以用於很多方面。
安裝
從這里下載Jmeter二進制文件壓縮包:Download Apache Jmeter
該程序解壓后即可使用。
簡單的Web接口壓力測試
1.啟動
解壓后進入bin文件夾,Windows直接運行jmeter.bat即可,Linux下運行jmeter.sh。注意Jmeter的使用需要JRE支持。
2. 添加測試線程組
Jmeter是一款模塊化的軟件,功能非常強大,但使用起來需要像搭積木一樣增加自己所需的模塊。從上手難度上講要高於Postman。
Jmeter啟動后默認打開了一個空的Test Plan。具體的測試內容需要我們自行添加。Jmeter以多線程的方式並行發起請求,因而我們首先需要添加線程組。
(1) 新建線程組
如圖新建一個線程組,點擊新增的線程組可以配置多線程的具體信息。
(2) 配置線程組
配置列表中,Number of Threads為線程的數量,此處180意味着我們在單次測試中會啟動180個線程,在我們的測試情況中會發起180個請求。
Ramp-Up Period為創建以上數量線程的時間,這里設置為60意味着180個線程將在60秒內逐步啟動。以上我們模擬的是較為平均的高壓力使用情況。假若將此值設置為較小的數字,大量請求將同時發起,可以測試突發的情況。
循環次數代表這一線程組測試的次數。我們僅運行1次。
3. http請求測試基礎
(1) 添加http請求
右鍵設置好的線程組,添加Http請求。
(2) 配置http請求及cookie
這里即配置我們發起請求的具體內容,其配置方式和Postman非常類似,照貓畫虎即可。
注意這里的請求也是不附帶任何Cookie信息的。因此我們還需要添加HTTP Cookie Manager來附帶額外的登陸Cookie信息。Cookie的內容可以從Postman的測試中獲取,也可以由瀏覽器F12獲取。添加后填入需要的Cookie信息即可。這里我們僅需要laravel_session以使網站識別我們的登陸賬戶。
(3) 配置結果查看模塊
除此之外我們還需要添加查看結果的相關組件。在Thread Group下增加View Results Tree可以查看每次請求的結果,增加Aggregate Report可以查看累計運行測試的情況。
4. 運行測試及查看結果
(1) 運行測試
在全部配置完成后點擊界面上方的綠色三角按鈕即可運行測試。
(2) 查看結果
可以在上述的兩個監聽器內查看結果,可以點擊掃把狀的按鈕清空運行結果。(如果不清空結果Aggregate Report將持續記錄)
在Aggregate Report的底部可以導出結果為csv文件。