使用 JMeter 進行壓力測試
一.前言
壓力測試是每一個Web應用程式上線之前都需要做的一個測試,他可以幫助我們發現系統中的瓶頸問題,減少釋出到生產環境後出問題的機率;預估系統的承載能力,使我們能根據其做出一些應對措施。所以壓力測試是一個非常重要的步驟,下面我帶大家來使用一款壓力測試工具JMeter。
二.關於JMeter
Apache JMeter是Apache組織開發的基於Java的壓力測試工具。用於對軟體做壓力測試,它最初被設計用於Web應用測試,但後來擴充套件到其他測試領域。 它可以用於測試靜態和動態資源,例如靜態檔案、Java 小服務程式、CGI 指令碼、Java 物件、資料庫、FTP 伺服器, 等等。JMeter 可以用於對伺服器、網路或物件模擬巨大的負載,來自不同壓力類別下測試它們的強度和分析整體效能。另外,JMeter能夠對應用程式做功能/迴歸測試,通過建立帶有斷言的指令碼來驗證你的程式返回了你期望的結果。為了最大限度的靈活性,JMeter允許使用正則表示式建立斷言。
官網:http://jmeter.apache.org/download_jmeter.cgi
這裡我選用了 4.0 版本的二進位制包:http://mirror.bit.edu.cn/apache//jmeter/binaries/apache-jmeter-4.0.zip
更多內容介紹https://baike.baidu.com/item/Jmeter/3104456
三.準備工作
因為JMeter是使用JAVA寫的,所以使用JMeter之前,先安裝JAVA環境,本文就不講不如安裝JAVA環境了。.
JAVA環境變數配置:https://jingyan.baidu.com/article/fd8044fa2c22f15031137a2a.html
解壓下載的二進位制包,進入bin目錄,使用jmeter.bat
啟動程式。
啟動之後會有兩個視窗,一個cmd視窗,一個JMeter的 GUI。前面不要忽略CMD視窗的提示資訊:
JMeter:
CMD視窗的提示資訊
================================================================================ Don't use GUI mode for load testing !, only for Test creation and Test debugging. For load testing, use NON GUI Mode: jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder] & increase Java Heap to meet your test requirements: Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file Check : https://jmeter.apache.org/usermanual/best-practices.html ================================================================================
上面的意思就是:不要使用GUI執行壓力測試,GUI僅用於壓力測試的建立和除錯;執行壓力測試請不要使用GUI。使用下面的命令來執行測試:
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
並且修改JMeter批處理檔案的環境變數:HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"
更改語言為中文
官方預設為我們提供了簡體中文。通過 【Options】->【Choose Language】變更為簡體中文
四.建立測試
1.建立執行緒組
在“測試計劃”上右鍵 【新增】-->【Threads(Users)】-->【執行緒組】。
設定執行緒數和迴圈次數。我這裡設定執行緒數為500,迴圈一次。
2.配置元件
在我們剛剛建立的執行緒組上右鍵 【新增】-->【配置元件】-->【HTTP請求預設值】。
配置我們需要進行測試的程式協議、地址和埠
當所有的介面測試的訪問域名和埠都一樣時,可以使用該元件,一旦伺服器地址變更,只需要修改請求預設值即可。
3.構造HTTP請求
在“執行緒組”右鍵 【新增-】->【samlper】-->【HTTP 請求】設定我們需要測試的API的請求路徑和資料。我這裡是用的json
4.新增HTTP請求頭
在我們剛剛建立的執行緒組上右鍵 【新增】-->【配置元件】-->【HTTP資訊頭管理器】。
因為我要傳輸的資料為json,所以設定一個Content-Type:application/json
5.新增斷言
在我們剛剛建立的執行緒組上右鍵 【新增】-->【斷言】-->【響應斷言】。
根據響應的資料來判斷請求是否正常。我在這裡只判斷的響應程式碼是否為200。還可以配置錯誤資訊
6.新增察看結果樹
在我們剛剛建立的執行緒組上右鍵 【新增】-->【監聽器】-->【察看結果樹】。
直接新增,然後點選執行
按鈕就可以看到結果了。
7.新增Summary Report
在我們剛剛建立的執行緒組上右鍵 【新增】-->【監聽器】-->【Summary Report】。
直接新增,然後點選執行
按鈕就可以看到結果了。
為了不引起不必要的爭論,隱藏了TPS。此資料不具備任何價值,僅僅為文章演示。
8.測試計劃建立完成
記得點儲存。
五.執行測試計劃
前面我們說過,執行測試計劃不能用GUI,需要用命令列來執行。
我這裡執行的命令為:
jmeter -n -t testplan/RedisLock.jmx -l testplan/result/result.txt -e -o testplan/webreport
說明:
testplan/RedisLock.jmx
為測試計劃檔案路徑testplan/result/result.txt
為測試結果檔案路徑testplan/webreport
為web報告儲存路徑。
Web報告如下:
六.寫在最後
執行緒數量和迴圈次數將會影響最終的測試報告,請大家多多測試。