工具對比
目前主流的開源性能測試工具主要有如下幾種
| 比較點 |
JMETER |
nGrinder |
Gatling | Tsung | 結果 |
| 開源 | 免費,完全開源 | 免費,完全開源 | 免費,完全開源 | 免費,完全開源 | = |
| 實現語言 |
JAVA |
JAVA |
Scala寫的,支持JAVA庫 | erlang | jmeter=ngrinder>gatling>Tsung |
| 使用方式 |
C/S或Command |
B/S |
Command | Command | = |
| 支持分布式 |
master/slave |
controller/agent |
不支持 | master/slave | jmeter=ngrinder=Tsung>gatling |
| 資源監控 |
monitor/plugin |
monitor方式,有直接可用的源碼 |
無 | 可以對遠程機器用erlang或者SNMP協議監控,並生成相應的圖表 | jmeter=ngrinder=Tsung>gatling |
| 社區活躍度 |
文檔完善,用戶多 |
有中文社區 |
有社區支持 | 有社區支持 | jmeter=ngrinder>gatling>Tsung |
| 是否需要編碼 |
基本不需要 |
需要,Jython/Groovy |
需要,scala | 需要 | jmeter>Tsung>ngrinder=gatling |
| 腳本的維護 |
本地 |
內置SVN |
本地 | 本地 | = |
| 腳本錄制 |
支持http代理錄制,支持第三方錄制 |
可通過PTS插件進行錄制 |
支持http代理錄制 | 支持腳本錄制 | = |
| 易用性 | 成熟的模板,元器件,控制器等直接引入 易用性相對強,對編程要求低 | 邏輯控制、參數化、檢查點 依賴編程 | 熟悉scala的人少,邏輯控制、參數化、檢查點 依賴編程 | 腳本格式和loadrunner是一樣的 | jmeter>Tsung>ngrinder>gatling |
| 協議支持 | 多協議的支持 | http協議,其他需要自己擴展開發 | http協議,其他需要自己擴展開發 | 多協議的支持 | jmeter>Tsung>ngrinder>gatling |
| 可擴展性 |
可增加plugin,擴展性強 |
支持插件 |
基於一套開源的Gatling DSL APT,功能容易擴展 | 支持插件 | = |
| 安裝 |
基於jdk,絕對輕量化,拷貝即用 |
兩個服務controller和agent |
基於jdk,絕對輕量化,拷貝即用 | 需要安裝3個服務和配置 | jmeter=gatling>ngrinder>Tsung |
| 壓測平台編碼量 | 大 | 小 | 很大 | 很大 | ngrinder>jmeter>gatling=Tsung |
通過從下面各個維度對比可以看出,工具jmeter都具有優勢,但壓測平台的開發編碼量比較大,nGrinder有現成的壓測平台,開發工作量少,但是易用性不如jmeter,腳本需要大量的編碼工作,推廣難道比較大,兩者各有優缺點。
平台開發工作量對比
如下為完全平台化需要完成的核心功能點
| 比較點 |
JMETER |
nGrinder |
| 平台開發主要實現功能 | 核心功能點如下
|
核心功能如下
|
可以看出JMETER的工作量要遠大於nGrinder
易用性對比
在易用性主要是在腳本的編碼工作量方面,通過對比可以看出jmeter無非常明顯的優勢,前提是測試人員具備一定的編碼能力
| 比較點 |
JMETER |
nGrinder |
| 參數化 | 通過界面操作完成,簡單 | 需要手功編寫代碼,編碼工作量少,簡單 |
| 關聯 | 界面操作,各個接口之間的數據可以直接傳遞,簡單 | 各個方法之間的值可以直接傳遞,簡單 |
| 檢查點 | 界面操作完成,簡單 | 有檢查點的方法調用,簡單 |
| 綜合場景 | 有豐富的邏輯控制器,簡單 | 需要大量的編碼工作,復雜 |
壓力機硬件資源消耗對比
壓力機對資源的占用對比,已壓測某服務為例,使用相同的並發用戶數500,對比壓力機資源占用可以看出,ngrinder的cpu占用是jmeter的4倍,內存占用是jmeter5倍
| 比較點 |
JMETER |
nGrinder |
| cpu | jmeter只需要1個進程,cpu占用為320% |
agent 如下10個進程CPU占用達到1200%
|
| 內存 | 進程內存占用為0.96G | agent10個進程內存占用5.3G |
nGrinder 壓測時,監控agent資源利用情況

jmeter

測試指標對比
通過對同一服務,相同並發數和測試時間,對比業務指標TPS和平均響應時間結果如下,jmeter的值要遠大於nGrinder,后續我們對nGrinder的壓測節點進行擴容
最終也只能壓測到18000多TPS
| 比較點 |
JMETER |
nGrinder |
| TPS | 24002 |
14778 |
| 響應時間 | 20ms | 33.1ms |
nGrinder測試結果截圖

JMETER 測試結果截圖

綜合分析
nGrinder在平台二次開發上最簡單,在易用性方面也比較好(前提是要具備一定的編碼能力),但是在調研的過程中發現非常耗壓力機資源,在相同並發下cpu占用是jmeter的4倍,內存占用是jmeter5倍以上,同時在測試kong的時候發現無法壓測到kong的極限值。所以 2個壓測工具可以根據公司或具體情況再選擇吧。
