Java性能測試從入門到放棄-詳解篇


Jmeter組件分類說明

  • Jmeter的組件可以放在任意位置

  • 線程池:用於創建線程。每個線程會"批次順序"執行任務,因此后面的任務可根據前面的任務決定具體的操作。

          1. 普通線程組(主線程組):用於創建主要的線程任務

          2. setUp線程組: 在普通線程組之前觸發,用於做測試的前置操作,例如創建測試賬戶

          3. tearDown線程組: 在普通線程組之后觸發,用於做測試的后置操作,例如清理工作。

  • 取樣器:用來模擬http,tcp請求。取樣器父節點需要包含線程組,否則不會執行

  • 前置處理器: 用於定義取樣器前置操作,例如定義用戶生成,JDBC操作。

  • 后置處理器:用於解析取樣器結果,父節點需包含取樣器。

  • 斷言:用來判斷取樣器結果,父節點需包含取樣器。

  • 定時器:用於控制並發請求的頻率。當父節點為取樣器,只對父節點生效。當父節點為線程組,對整個線程組生效。

  • 配置元件:用於配置公共數據,可被同級節點或同級節點的子節點引用

  • 監聽器:用於統計測試結果,形成圖表。常用的有察看結果樹,匯總報告,聚合報告。可通過安裝Plugins Manager來豐富監聽器的類型。

  • 假如想查看每個分類的詳細說明,可以查看:倔強的瀟灑小姐

火焰圖

Java+Jmeter+火焰圖+Macos 舉栗

舉個栗子

操作流程

  • 啟動Java后台項目, 9999端口,api為http://localhost:9999/v1/searchsrv/all/activities?value=1。請使用控制台啟動。例如
# 記住包名
java -jar mockserver.jar
# api 返回值結構為
#{
#    "error": null,
#    "result": {},
#    "success": true
#}
#在macos上,啟動火焰圖,並追蹤到mockserver
#需要下載上面那個火焰圖工具
./createFlameGraph.sh mockserver
  • 啟動Jmeter,添加線程組
線程池
線程池
  • 線程組右鍵->配置原件->http請求默認值,協議http,服務名稱localhost,端口號9999

  • 線程組右鍵->配置原件->用戶自定義的變量

自定義變量
  • 線程組右鍵->取樣器->http請求。
    • 協議,服務器名稱,端口號都置空,會自動獲取http請求默認值
    • 參數取了用戶自定義的變量
http請求
  • http請求右鍵添加->斷言->json斷言->用於判斷api返回是否正確。不添加默認只有http code 200認為是正確的
json斷言
  • 線程組右鍵添加->監聽器->察看結果樹->用於查看各個api的詳細執行結果.也可以添加在http取樣器下面,單獨監聽。

  • 線程組右鍵添加->監聽器->匯總報告->用於查看各個api匯總的結果,也可添加在http取樣器下面,單獨監聽。

Jmeter查看查看結果

  • 通過察看結果樹查看請求是否成功,自定義變量是否生效,JSON斷言是否生效
  • 通過匯總報告查看請求匯總情況

火焰圖查看調用堆棧

  • Jmeter接口循環多跑幾次
  • 停止Java項目
  • 在火焰圖工具目錄下找到最新的svg文件,使用瀏覽器打開

更豐富多彩的圖形展示

jmeter雖然在可視化界面運行時能有很多圖形界面,但是開啟了會影響性能。所以建議使用命令行跑,然后生成一個html的頁面

下面提供一個腳本,每次運行會根據時間生成一個目錄,並將可視化界面生成到目錄下。使用的時候需要修改resultPath(結果路徑),sciptFile(腳本路徑)

  • 可視化 CLI 模式
#設置結果集記錄
time_now=`date "+%Y-%m-%d_%H_%M_%S"`
resultPath=/Users/hehe/performanceTest/localRun/result/${time_now}

logPath=${resultPath}/log
samplePath=${resultPath}/sample
reportPath=${resultPath}/report
mkdir ${resultPath}
mkdir ${logPath}
mkdir ${samplePath}
mkdir ${reportPath}

#設置腳本路徑
scriptFile=/Users/hehe/performanceTest/localRun/script.jmx
#設置jmeter路徑
jmeterPath=/Users/klook/SoftwareInit/apache-jmeter-5.1.1/bin/jmeter
sh ${jmeterPath} -n -t ${scriptFile} -l ${samplePath}/result.jtl -j ${logPath}/result.log -e -o ${reportPath}

  • 參數說明
-n: 指定 Jmeter 使用 CLI 模式運行
-t: 指定編寫完成的測試計划腳本( jmx 文件)
-l: 指定記錄樣本結果的 JTL 文件的名稱
-j: 指定 Jmeter 運行日志輸出文件
-r: 在指定的服務器(JMeter property "remote_hosts")上運行測試計划
-R: 在指定的多個遠程服務器上運行測試計划
-g: 僅生成報告儀表盤
-e: 測試完成后生成報告儀表板
-o: 指定測試報告輸出的位置,文件夾不得存在或為空
-H: 指定代理服務器主機名或IP地址
-P: 指定代理服務器端口

易踩坑

因為同一個線程組的任務是順序執行的,所以同一個線程組中,頻率最低的任務是所有任務的瓶頸。例如A->B,A每分鍾60次,B每分鍾120次,實際B為每分鍾60次


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM