如何編寫測試團隊通用的Jmeter指令碼

溫一壺清酒發表於2022-07-13

平時學習、工作過程中,編寫的一些jmeter指令碼,相信大多數都遇到過這個問題。那就是:如果換一臺電腦執行,檔案路徑不一樣,會導致執行失敗。

前不久,自己就真真切切遇到過一回,A同學寫了個指令碼用於壓測,需要其他測試同學協助下,結果部分人員沒有提前除錯程式碼,導致執行的時候報錯。

主要的原因就是,A同學寫的指令碼不能通用,以自己本機的路徑來編寫的,而其他同學的檔案路徑不一樣,導致報錯。

後面我實在看不下去了,把指令碼改動了下,壓測順利結束。

那麼這個問題是否有解決的辦法呢,自然是有的,而且很簡單。

我們來看詳細

獲取檔案目錄

使用者定義變數

我們先來看第一種方式,直接使用beanshell函式,將變數放到使用者定義的變數中,如下所示;指令碼執行後,可以在日誌中檢視到獲取到的指令碼路徑。

程式碼如下所示:

${__BeanShell(import org.apache.jmeter.services.FileServer;FileServer.getFileServer().getBaseDir();,)}

新增的這行程式碼,後續直接用shellPath欄位來替換掉固定檔案path就ok了

beanshell處理器

線上程組中新增beanshell後置處理器,配置如下:

程式碼如下所示:

import org.apache.jmeter.services.FileServer;

String path = FileServer.getFileServer().getBaseDir();

log.info(path);

HTTP預設請求頭

通常一個指令碼中,不止一個介面請求。我們每個請求都得有host、protocol,如果這些通用引數都寫在每個請求裡,變動一次,那這改動量可就太大了。

對於這個問題,我們可以使用HTTP預設請求頭,將host、protocol配置好,在後續的請求中就不會再填寫host、protocol。

如果引數有改動,那也只需要改動一次而已,大大提高效率。配置如下所示:

功能應用

針對開篇講到的案列,問題出現點,我們來一一解答

CSV引數化

指令碼是打包在一個資料夾傳遞的,指令碼中引用一個引數化檔案。檔案的路徑為A同學的固定路徑,可其他同學拿到指令碼,存放的路徑並不一致,那直接執行的話,必然會報錯。

對於這個點,我們來改造如下,指令碼路徑使用變數shellPath替換即可,如下所示:

附件上傳

指令碼中還有個附件上傳請求,檔案路徑也是固定的,同理,用我們定義的變數shellPath替換即可,如下所示:

刪除資料

指令碼執行過程中,會儲存一些欄位資料,但為了不影響新一輪測試,所以在測試前,會把歷史資料給刪除。

同樣的,我們要刪除的檔案路徑也替換成變數shellPath,如下所示:

以上只是jmeter使用中很簡單的功能,雖然簡單,但作用卻很大。

如果指令碼不通用,即使在自己電腦上正常執行,換一臺裝置,就又得再除錯,不是我們想要的效果。

在編寫指令碼時,還是需要編寫通用的指令碼,一些小細節,忽略不得。

相關文章