軟件測試小白:如何靠Jmeter擺脫搬運工角色?
很多接口自動化測試人員都知道,實際上我們進(jìn)行接口自動化時,大部分人都是依賴于開發(fā)維護(hù)的接口設(shè)計文檔,或者是直接使用抓包工具獲取需要的接口數(shù)據(jù)。
然后再去按照ULR、headers、body進(jìn)行各種組裝請求,將接口的基礎(chǔ)配置從文檔或者抓包工具復(fù)制搬運到到對應(yīng)的接口自動化工具(例如Postman、Jmeter、Robotframework等)上面進(jìn)行二次組合,最后再通過工具自身發(fā)起接口請求。
實際上Jmeter自身提供了“錄制”的功能,測試人員可以直接通過“錄制”自己的一系列操作,然后對錄制起來的請求進(jìn)行二次優(yōu)化設(shè)計,可以大大減少前期的基礎(chǔ)編輯的時間。
前期物料準(zhǔn)備
接口自動化流程和功能測試流程一樣,在開始測試之前都需要進(jìn)行一些物料準(zhǔn)備,例如功能測試需要確定測試環(huán)境(測試1、測試2或者直接預(yù)生產(chǎn)測試)、測試設(shè)備(Android系統(tǒng)、ios系統(tǒng)等),對應(yīng)的今天要實踐的接口自動化,需要準(zhǔn)備以下物料:
1.Jmeter工具安裝
2.代碼環(huán)境
3.測試系統(tǒng)的賬號/密碼等信息
擺脫搬運的神器
Jmeter的錄制功能原理和抓包工具一樣,都是通過HTTP代理服務(wù)器進(jìn)行,所以在進(jìn)行錄制之前需要設(shè)置代理HTTP(S) Test Script Recorder,主要設(shè)置的內(nèi)容如下:
1.代理的ip和port,一般ip使用默認(rèn)的,端口可定義8888(注意瀏覽器代理端口需要跟Jmeter的保持一致,如下第一圖);
2.設(shè)置錄制下來的請求保存的路徑,選擇保存到“測試計劃TestPlan-線程組Thread Group”下(如下第一圖);
3.(重點)設(shè)置過濾,過濾掉不必要的請求,過濾可選擇兩種模式:一種是只錄制某規(guī)則的請求,一直是不錄制某規(guī)則的請求
(如下第二圖)。


啟動錄制:

錄制數(shù)據(jù)

去除不必要的接口請求,僅保留本次自動化的目的的接口:登錄+獲取XX詳情頁數(shù)據(jù)。

1.優(yōu)化HTTP Header Manager
Jmeter腳本錄制成功后,每個HTTP請求下都會自動帶一個默認(rèn)的HTTP信息頭管理器,但是很多數(shù)據(jù)實際接口需要的信息頭是通用的且只需要兩個字段就可以,所以優(yōu)化前后對比如下:

優(yōu)化完后,將該管理器移動到線程組同一級別,這樣該測試計劃下的所有請求可共用一個信息頭管理器HTTP Header Manager。
2.處理接口依賴
由于錄制時,打開XX詳情頁需要依賴于登錄信息,所以需要在回放腳本前需要手動處理接口上下依賴的登錄信息。
本文案例的依賴有兩個,子系統(tǒng)的登錄依賴于主系統(tǒng)登錄成功返回的token,而打開XX詳情頁接口依賴于子系統(tǒng)登錄成功返回的token,所以需要分別通過jemter自帶的后置處理器提取登錄成功的信息。
2.1主系統(tǒng)和子系統(tǒng)登錄依賴:
i.使用后置處理器Regular Expression Extractor通過正則表達(dá)式提取Token;
ii.在下一個接口中直接引用提取的Token變量。
2.2引用HTTP Cookie Manager統(tǒng)一管理子系統(tǒng)下的接口請求:
子系統(tǒng)登錄成功后,接下來子系統(tǒng)內(nèi)的所有請求均使用同一個登錄信息,所以可引用HTTP Cookie Manager統(tǒng)一管理。
接口之間的依賴處理詳細(xì)如下圖:

3.處理接口上的時間戳和增加監(jiān)聽器
3.1時間戳可使用Jemter自帶的函數(shù)助手,自動生成時間戳變量;
3.2監(jiān)聽器:可選擇View Results Tree先保證接口能自動回放,后續(xù)再根據(jù)需要添加其他監(jiān)聽器。
4.添加循環(huán)控制器,方便對需要壓測的接口進(jìn)行管理。
實戰(zhàn)結(jié)果

總結(jié)
通過上述操作可以看到,相對比日常的接口自動化,我們減少了url、method、data/body、以及信息頭等的處理,我們的工作變成集中在重新梳理下接口的依賴以及添加監(jiān)聽器,就可以完成接口自動化了。
當(dāng)然了,如果是只進(jìn)行一兩個接口可能這個錄制功能看起來也不是特別大的作用,可是如果遇到是幾十個接口,那么每個接口的需要填充數(shù)據(jù)都通過錄制來完成,這個整體上都可以說能節(jié)省20%的工作量,大大提高了測試人員的工作效率。
Jmeter的錄制功除了能提高工作人員的效率外,也存在一定的弊端,例如:
冗余請求
錄制時可能存在很多非必要的請求,需要人工花費時間去剔除。
解決方法:優(yōu)化正則表達(dá)式。
參數(shù)化硬編碼
用戶名/密碼以及環(huán)境變量等錄制時取實時配置數(shù)據(jù),配置數(shù)據(jù)變動時,就需要挨個接口去修改。
解決方法:需要人工去提取變量。
錄制腳本重用性差
所有請求都集中在一個文件夾,腳本復(fù)用性低,例如相同請求在不同模塊內(nèi)無法直接進(jìn)行復(fù)用。
解決方法:需要對請求進(jìn)行梳理分類。
以上為個人錄制遇到的部分弊端,這些弊端需要測試人員對錄制好的腳本進(jìn)行模塊化和參數(shù)化變量等設(shè)計。
就好比HR招聘了一堆人進(jìn)來后,接下來要給每個員工分配工號基本信息、安排部門等,在通訊錄、財務(wù)系統(tǒng)等內(nèi)直接引用工號即可獲取到員工的最新基本信息,若是哪個項目需要測試,直接把測試部門推上去就可以,這就是參數(shù)化變量和模塊化的作用。
最后有一個小小的建議:初學(xué)者還是要一個腳印的去學(xué)習(xí),不能一開始就依賴于錄制功能,只有不斷實踐,才會學(xué)得更深!
歡迎加VX:xiaoxianchen89,回復(fù)B站,免費加入軟件測試學(xué)習(xí)交流群,領(lǐng)更多測試學(xué)習(xí)資料