一、JMeter官網
下載地址
http://jmeter.apache.org/download_jmeter.cgi
Jmeter wiki
https://wiki.apache.org/jmeter
二、概念
ElapsedTime
消耗時間,與ResponseTime/SampleTime一致,表示開始請求到響應接收完畢的時間;
Latency
延遲時間,僅包括開始請求到准備接收響應的時間;
90% Line
一種時間度量指標,表示90%的請求都在該響應時間內完成;
Throughput
吞吐量,指每秒處理的請求數;
公式:Throughput=(number of requests) / (total time)
吞吐量與響應時間/並發數的關系:
TPS=U_concurrent/(T_response+T_think)
其中T_think為用戶思考時間
ThreadGroup
線程組,用於控制並發請求的組件;
設置參數
- 線程數量,控制並發數量
- rame-up周期,線程柔和增長周期,比如100個線程的增長周期是10s,那么1s增加10個線程
- 固定請求數量
- 循環執行設置,可指定開始和結束時間
SummaryReport
聚合報告,結果指標包括:
| 屬性 | 描述 |
|---|---|
| label | 每個樣本的名稱 |
| samples | 測試請求總數量 |
| average | 平均響應時間 |
| median | 50%用戶的響應時間 |
| 90%line | 90%用戶的響應時間 |
| min | 最小響應時間 |
| max | 最大響應時間 |
| error% | 錯誤發生率 |
| recv KB/s | 每秒接收的數據量 |
| throughput | 吞吐量(TPS) |
三、啟動停止
GUI啟動
./jmeter.bat
命令行啟動
jmeter -n -t xxx.jmx
停止測試
//平滑停止(gracefully stop, thread will stop at next opportunity)
./bin/shutdown.sh
//立即停止(will kill thread directory)
./bin/stoptest.sh
四、使用變量
properties文件
Jmeter主要的配置文件
- jmeter.properties,定義jmeter運行的關鍵配置;
- system.properties,定義Java進程的系統變量,通過System.getProperties()可查詢;
- user.properties,自定義配置,可覆蓋jmeter.properties
命令行啟動
-J 指定本地JMeter變量
-D 指定Java系統變量
-G 指定全局JMeter變量,在遠程測試時會傳輸到測試節點
樣例
PATH=$PATH:/opt/local/jre/bin
JVM_ARGS="-Xmx2048m -Xms512m -Xmn256m -XX:PermSize=128m -Xss256k"
jmeter -Jmongo.host=xxx -Jmongo.port=xxx -n -t test.jmx
JVM_ARGS 用於指定JVM大小,-n指定了no-gui模式啟動
-Gglobal.properties可代替-Gvar=value的方式
引用方式
在測試計划中可通過函數對變量進行引用:
${__P(varName,defaultValue)}
五、遠程測試
- 將jmeter部署到遠程節點,啟動server
PATH=$PATH:/opt/local/jre/bin
JVM_ARGS="-Xmx2048m -Xms512m -Xmn256m -XX:PermSize=128m -Xss256k"
./bin/jmeter-server &
端口設置
Jmeter-server采用RMI實現通訊,默認端口為1099
可編輯user.properties進行修改:
server_port=1999
- 本地配置遠程節點
修改user.properties:
remote_hosts=xxx:1999
- 命令行執行
配置好遠程節點之后,可直接通過GUI客戶端執行測試,然而在自動化的場景下往往需要采用命令行方式執行:
//啟動全部遠程節點測試
jmeter -Gmongo.host=xxx -Gmongo.port=xxx -n -t test.jmx -r
//指定部分遠程節點測試
jmeter -Gmongo.host=xxx -Gmongo.port=xxx -n -t test.jmx -R192.168.0.100:1999,192.168.0.101:1999
//停止遠程節點測試
jmeter -Gmongo.host=xxx -Gmongo.port=xxx -n -t test.jmx -R192.168.0.100:1999,192.168.0.101:1999 -Z
六、生成報告
jtl文件
Jmeter 執行測試后可生成jtl/csv/xml的結果文件,通過在結果監聽器中添加輸出路徑可獲得。
也可以通過命令行方式直接輸出,如:
jmeter -n -t test.jmx-l result.jtl
html報告
Jmeter3.x支持直接生成HTML格式的報告,可參考詳細說明
- 直接生成報告
jmeter -n -t test.jmx-l result.jtl -e -o /opt/local/jmeter/result/html
-e 表示生成html報告,-o指定目標路徑(必須為空)
- 從jtl文件中轉換
jmeter -g result.jtl -o /opt/local/jmeter/result/html
定制報告
修改user.properties:
//按sample名稱過濾
jmeter.reportgenerator.sample_filter=find|update|delete|list|insert
//APDEX模型-滿足需求閾值(響應時間)
jmeter.reportgenerator.apdex_satisfied_threshold=300
//APDEX模型-可容忍閾值(響應時間)
jmeter.reportgenerator.apdex_tolerated_threshold=1200
//數據聚合頻率,性能測試場景可適當減小,穩定性測試可加長,默認60s
jmeter.reportgenerator.overall_granularity=5000
關鍵報表
ResponseTimeOverTime
TransactionsPerSecond
ActiveThreadOverTime
ResponseTimePercentiesOverTime
七、性能監控
使用Perfmon插件,插件地址
- 部署ServerAgent
將ServerAgent上傳到目標服務器,執行startAgent.sh啟動;
默認情況下會啟動4444,可修改啟動端口:
./startAgent.sh --udp-port 7777 --tcp-port 7777
-
編輯Jmeter腳本文件,添加Perfmon監聽器。
可設置將監控數據輸出到jtl文件用於后續分析 -
自動生成圖片
需借助JMeterPluginsCMD插件,下載地址
命令行執行:
JMeterPluginsCMD.sh --generate-png cpu.png --input-jtl perfmon-cpu.jtl --plugin-type PerfMon --width 800 --height 600
八、常用插件
SteppingThreadGroup
插件地址
Jmeter自帶的ThreadGroup只能均勻增加線程,無法模擬更真實的壓力場景;
該插件支持更靈活的控制並發壓力,如:
初始啟動20線程,此后每10秒鍾增加5個線程,到達100個線程之后持續運行100s...
CompositeGraph
插件地址
該插件將響應時間、吞吐量報表進行了組合,需依賴於其他幾個插件。
在觀察服務器極限性能時比較有用,可用於權衡指定請求頻度下並發數大小。
通常情況下當並發數超過系統承受能力時,TPS出現明顯下滑,響應時間持續上升。
九、參考資料
GitBook-Jmeter參考
https://aimer1124.gitbooks.io/jmeter-tutorial/
yukinami的博客
http://yukinami.github.io/2015/11/26/性能測試指南/
Jmeter邏輯控制器(總結的不錯的一篇文章)
http://www.guru99.com/controllers-in-jmeter.html
Jmeter VS LoadRunner
http://www.cnblogs.com/shuiyelifang/p/5749523.html
TPS/響應時間/並發數的研究
http://blog.csdn.net/wind19/article/details/8600083
