在本文中,我將解釋如何使用JMeter + InfluxDB + Grafana得到實時性能測試結果。sql
請注意,此主題太大,沒法涵蓋一篇文章中的全部內容。因此,我試圖提供與TestAutomationGuru的其餘文章的連接,這些文章可能與本文有關。請儘量檢查一切。shell
多年前,當我之前運行JMeter測試時,我沒法理解測試執行期間應用程序的性能。我老是不得不等待測試完成。這有點煩人 - 特別是在長時間運行的測試中。有時,我可能不得不連續2/3天進行浸泡測試。數據庫
在某些時候,JMeter 在非GUI模式下啓用了2.11版本的彙總器輸出。運行JMeter測試時,您能夠看到如下輸出。apache
它有點幫助,上面的摘要提供了測試運行時須要的大量信息。它顯示每30秒的 最小,最大,平均響應時間,吞吐量,錯誤計數,活動用戶數(能夠在jmeter.properties中更改摘要間隔)。後端
可是當測試運行幾個小時而且每30秒在控制檯中有大量的彙總器輸出時,可能有點難以理解結果。例如,若是我想知道速率降低的活動用戶數,我須要很是仔細地逐行檢查彙總器輸出!我沒法與開發團隊/應用程序架構師分享結果,由於結果不是很是用戶友好的格式。要建立一個漂亮的圖形,我須要等待JMeter測試完成。瀏覽器
所以,我沒有在控制檯中編寫這個摘要輸出,而是修改了JMeter的摘要類以將結果發送到數據庫 - 這樣我就能夠經過查詢數據庫來建立一個漂亮的圖表。對咱們的團隊來講,實時分析性能測試結果很是有幫助。JMeter還在2.13版本中添加了一個單獨的監聽器,它將數據發送到數據庫,這能夠幫助咱們得到實時結果。bash
我將介紹JMeter的方法和個人方法。你能夠遵循其中任何一個。不是都!!服務器
JMeter v2.13引入了一個新的監聽器,用於在測試運行時將結果發送到時間序列數據庫(Influxdb / graphite)。經過配置Grafana(一個開源指標儀表板)鏈接到Influxdb / graphite,咱們能夠建立漂亮的圖形,這將幫助咱們在JMeter運行測試時得到實時指標!架構
時間序列數據庫:時間序列是隨時間變化採集的數據序列。時序數據庫是處理時間序列數據的軟件應用程序。想象它就像一個sql表,其中時間是主鍵!app
咱們將在本文中使用InfluxDB 做爲咱們的數據庫。點擊此處 瞭解更多信息。
您可能想知道的術語不多:
influxd config
[[graphite]]
enabled = true bind-address = ":2003" database = "jmeter" retention-policy = "" protocol = "tcp" batch-size = 5000 batch-pending = 10 batch-timeout = "1s" consistency-level = "one" separator = "." udp-read-buffer = 0
influxd -config /path/to/config/file
一旦InfluxDB 啓動並運行,下一步就是建立一個JMeter測試,將測試數據發送到InfluxDB。
influx Connected to http://localhost:8086 version 1.3.6 InfluxDB shell version: 1.3.6
SHOW DATABASES name: databases name ---- _internal jmeter
USE jmeter Using database jmeter
show measurements name: measurements name ---- jmeter.all.ok.count jmeter.all.h.count jmeter.all.ok.min jmeter.all.ok.max jmeter.all.ok.avg ...........
但願您可以將測試結果成功發送到InfluxDB!恭喜。如今是咱們設置Grafana服務器從測試結果建立圖表的時候了。
但願你如今有了這個主意!你能夠從這裏開始建立不一樣的指標!
我爲個人應用程序建立了不錯的儀表板。您能夠繼續閱讀本文,下載並使用它們!
JMeter的Backend Listener真正幫助咱們得到實時性能測試結果。然而,它創造了大量的測量。'min','max'值可能與您的彙總報告一致。可是你不能期望百分位數,吞吐量,平均值與你的彙總報告相匹配!! 由於此偵聽器會爲每一個給定的間隔(例如每1秒)計算這些值。隨着時間的推移,你基本上能夠得到吞吐量。不是整個測試期間。因此,它不匹配。
個人自定義方法幫助我按照我想要的方式得到結果。
因爲上面提到的JMeter後端監聽器的限制而且爲了實現個人目標,我只想用我本身的實現 - 經過更新具備摘要的Apache核心庫(它負責編寫上面提到的聚合信息)在控制檯中) - 因此只要它在控制檯中寫入信息,它也能夠更新InfluxDB中的數據。沒有爲此目的建立單獨的監聽器彷佛對我來講沒問題,由於在測試中添加更多的監聽器將消耗內存並可能影響個人測試。性能方面 - 這種方法比添加新的後端監聽器表現更好,由於我沒必要爲計算添加任何額外的邏輯。
[http]
# Determines whether HTTP endpoint is enabled. enabled = true # The bind address used by the HTTP service. bind-address = ":8086"
influx Connected to http://localhost:8086 version 1.3.6 InfluxDB shell version: 1.3.6
CREATE DATABASE jmeter
TAG-Influx-Grafana.zip(2991次下載)
# True to send data to influx db summariser.influx.out.enabled=true # True to send write the info it sends to influx db - enable only for debugging purpose # summariser.influx.out.enabled=false # Influx host, port, db details details summariser.influx.url=http://localhost:8086/write?db=jmeter # use below format if there is any username & password for influxdb # http://localhost:8086/write?db=jmeter&u=myusername&p=mypassword # Name of your application - Useful for querying the results when you use this framework for multiple applications # Do not add any space or dot or any other special chars summariser.influx.application=myApp # Perofrmance test strategy - Useful for querying the results when you use this framework for multiple strategies # Do not add any space or dot or any other special chars summariser.influx.application.suite=stress-test # timeouts summariser.influx.connection.timeout=5000 summariser.influx.socket.timeout=5000 summariser.influx.request.timeout=5000
SHOW DATABASES name: databases name ---- _internal jmeter
USE jmeter Using database jmeter
show measurements name: measurements name ---- delta samples total
注意:
若是您仍然面臨將數據發送到InfluxDB的問題 - 請檢查此帖子以進行故障排除。
下載的zip文件還應包含Grafana儀表板(採用JSON格式)。在Grafana中導入這些儀表板文件(您能夠在Home下找到導入功能,以下所示) - 請在導入這些儀表板以前安裝Grafana餅圖插件 - 請在此處查看。
成功導入後,它將建立儀表板,以下所示。它未來自增量和總測量的數據顯示爲適當的度量標準。(確保您的Grafana正確設置了數據源。它應該指向咱們發佈數據的InfluxDB實例)。
此儀表板將從Samples測量中檢索數據。您能夠根據特定頁面,狀態等進一步過濾。有時,當請求失敗時(好比某些auth錯誤),響應時間可能會很是短 - 所以吞吐量會很大。這個不對。這就是爲何我有狀態過濾器來得到成功的吞吐量。
經過調整'Summarize'下拉菜單,讓grafana計算不一樣時間間隔的吞吐量。
使用JMeter的後端監聽器/自定義監聽器+ InfluxDB + Grafana - 咱們能夠建立使人驚歎的圖表,它們將爲咱們提供JMeter正在運行的測試的實時指標。若是您有長時間運行的測試,則無需等待測試完成以訪問結果。只需分享Grafana儀表板URL - 這樣任何有連接的人均可以看到正在發生的事情!
請查看如下與此相關的文章。
注意: 確保Influx服務器的系統時間與運行JMeter的計算機同步。這是很是重要的。由於當您查詢Influxdb時 - 默認狀況下它會顯示時間爲<=系統時間的記錄。若是JMeter機器的時間是,好比說下午4:50。InfluxDB服務器系統時間是下午4:45。當您運行JMeter測試時,它將可以將記錄發佈到InfluxDB。可是,當您查詢Influxdb時,它不會顯示這些記錄。您須要等待5分鐘才能看到插入的記錄。
即便遵循了全部步驟,它也沒法按預期工做?沒問題; 點擊此處查看排除故障的步驟。