在上一篇博文中,主要是講了InfluxDB的配置,博文鏈接:https://www.cnblogs.com/hong-fithing/p/14453695.html,今天來分享下Jmeter的配置。
在介紹Jmeter之前,必須是要有Jmeter環境的,至於環境怎么配,工具怎么用,可以看以前的博文。環境搭建:Jmeter——環境搭建;Jmeter系列博文:Jmeter系列。所以這些就不多講了,可以自行查看,今天以性能監控平台配置為主,介紹Jmeter運行腳本來采集對應數據。
Jmeter配置
添加監聽器
在線程組中,添加監聽器(Listener)-> Backend Listener,如下圖所示:

配置Backend Listener監聽方式
添加監聽后,監聽方式默認為GraphiteBackendListenerClient,如下圖所示:

監聽方式是可以修改的,監聽器沒擴展的情況下,共有2種,擴展后,支持四種方式,如下所示:

我已經擴展過了,所以展示4種,具體擴展方式,稍后再說。今天介紹主要以前三種監聽方式為主,三種方式采集的數據,也有些許不同,我們詳細來看。
GraphiteBackendListenerClient監聽
界面配置
配置監聽方式為GraphiteBackendListenerClient,不同的監聽方式,配置面板上的配置字段也有不同之處,配置如下所示:

配置界面的詳細字段如下:
graphiteHost:InfluxDB安裝的服務器ipgraphitePort:端口;默認就是2003。ps:除非你自己安裝InfluxDB時設置了其他端口。按自己的實際端口配置即可rootMetricsPrefix:指標的根前綴;將測試結果存入數據庫時,不同指標會生成不同表summaryOnly:當你線程組有多個請求又想知道每個請求的結果數據時,最好填false,因為true只會返回所有請求的集合數據報告,不會輸出每條請求的數據報告samplersList:取樣器列表;想收集哪些請求就填哪些,最好用正則去匹配useRegexpForSamplersList:是否使用正則;如果true則使用,samplersList里可以匹配正則表達式percentiles:百分比;即類似聚合報告里90% Line,95% Line,99% Line的數據;倘若想要99.9時,需要寫成【99_9】,用下划線代替點
運行腳本
運行腳本,運行沒報錯,便會產生數據了,可以通過服務器客戶端查看,或者上篇博文中介紹的客戶端工具查詢。查詢數據如下所示:

通過查詢數據發現,總共會生成三種前綴的表,分別是:jmeter.請求名稱、jmeter.all、jmeter.test。通過數據可以看到,請求數據都是整齊划一的以jmeter.開頭,是因為我們剛才配置的時候,設置的是jmeter.;如果你配置成其他,那就會以自定義的前綴生成數據了。
- 前綴說明
jmeter.all :代表了所有請求;當summaryOnly=true時,就只有samplerName=all的表了
jmeter.請求名稱 :如圖所示,HTTP請求的名字是HTTP Request 溫一壺清酒 appium
jmeter.test :線程組設置相關的指標數據
參數指標
參數指標說明,在jmeter官網有介紹,地址是:https://jmeter.apache.org/usermanual/realtime-results.html,可以查看原文檔。我在這里就按中文來說明了。
線程/虛擬用戶指標
Thread/Virtual Users metrics - 線程/虛擬用戶指標
運行完腳本,生成的數據中,是有對應的5個指標數據的,如下所示:

| 指標 | 全稱 | 含義 |
|---|---|---|
| <rootMetricsPrefix>test.minAT | Min active threads | 最小活躍線程數 |
| <rootMetricsPrefix>test.maxAT | Max active threads | 最大活躍線程數 |
| <rootMetricsPrefix>test.meanAT | Mean active threads | 平均活躍線程數 |
| <rootMetricsPrefix>test.startedT | Started threads | 啟動線程數 |
| <rootMetricsPrefix>test.endedT | Finished threads | 結束線程數 |
響應時間指標
Response times metrics - 響應時間指標
每個sampler都包含了所有響應時間指標,每個sampler的每個指標都會有單獨的一個表存儲結果數據
| 指標 | 含義 |
|---|---|
| <rootMetricsPrefix><samplerName>.ok.count | sampler的成功響應數 |
| <rootMetricsPrefix><samplerName>.h.count | 服務器每秒命中次數(每秒點擊數,即TPS) |
| <rootMetricsPrefix><samplerName>.ok.min | sampler響應成功的最短響應時間 |
| <rootMetricsPrefix><samplerName>.ok.max | sampler響應成功的最長響應時間 |
| <rootMetricsPrefix><samplerName>.ok.avg | sampler響應成功的平均響應時間 |
| <rootMetricsPrefix><samplerName>.ok.pct<percentileValue> | sampler響應成功的所占百分比 |
| <rootMetricsPrefix><samplerName>.ko.count | sampler的失敗響應數 |
| <rootMetricsPrefix><samplerName>.ko.min | sampler響應失敗的最短響應時間 |
| <rootMetricsPrefix><samplerName>.ko.max | sampler響應失敗的最長響應時間 |
| <rootMetricsPrefix><samplerName>.ko.avg | sampler響應失敗的平均響應時間 |
| <rootMetricsPrefix><samplerName>.ko.pct<percentileValue> | sampler響應失敗的所占百分比 |
| <rootMetricsPrefix><samplerName>.a.count | sampler響應數(ok.count+ko.count) |
| <rootMetricsPrefix><samplerName>.sb.bytes | 已發送字節 |
| <rootMetricsPrefix><samplerName>.rb.bytes | 已接收字節 |
| <rootMetricsPrefix><samplerName>.a.min | sampler響應的最短響應時間 (ok.count和ko.count的最小值) |
| <rootMetricsPrefix><samplerName>.a.max | sampler響應的最長響應時間 (ok.count和ko.count的最大值) |
| <rootMetricsPrefix><samplerName>.a.avg | sampler響應的平均響應時間 (ok.count和ko.count的平均值) |
| <rootMetricsPrefix><samplerName>.a.pct<percentileValue> | sampler響應的百分比(根據成功和失敗的總數來計算) |
InfluxDBBackendListenerClient監聽
界面配置
配置方式一樣,只是選擇不同的監聽方式而已,直接上圖,配置也如下圖所示:

每個配置項的含義如下:
influxdbUrl:安裝influxdb的路徑;主要格式:http://主機地址:8086/write?db=數據庫名application:應用名稱;在 events 表中對應的字段是 applicationmeasurement:表名;數據存儲到哪個表,默認是jmeter,不用改即可summaryOnly:當你線程組有多個請求又想知道每個請求的結果數據時,最好填false,因為true只會返回所有請求的集合數據報告,不會輸出每條請求的數據報告samplersRegex:取樣器列表;想收集哪些請求就填哪些,最好用正則去匹配percentiles:百分比;即類似聚合報告里90% Line,95% Line,99% Line的數據;倘若想要99.9時,需要寫成【99_9】,用下划線代替點testTitle:測試名稱;在 events 表中對應的字段是 text ,JMeter在測試的開始和結束時自動生成注釋,該注釋的值以'started'和'ended'結尾eventTags:Grafana允許為每個注釋顯示標簽;在 events 表中對應的字段是 tags
運行腳本
我們還是用客戶端工具查看,這次只生成了2張表,分別是:events 和 jmeter。如下所示:

表作用
events表:用於存儲事件的
jmeter表:存儲測試結果數據,Grafana也是從這個表獲取數據再展示
在講配置項含義解釋時,application和testTitle對應數據表中對應的字段,我們查詢events表數據,如下所示:

application默認為jmeter;testTitle對應的是text,落的數據值為Test name started/Test name ended,Test name就是我們在界面配置的名稱;time字段的時間差,就是腳本的運行時間了。
jmeter面板中也看出的確只運行了1s,如下所示:

JmeterInfluxDBBackendListenerClient監聽
這種方式是在查詢Grafana監控模板時找到的,這次博文先不講Grafana的監控指標的配置,先把腳本監聽方式講完。
Grafana官網介紹如下:

插件引用
下載插件
插件下載地址,下載對應的jar包即可。
jmeter配置
將下載的插件放到Jmeter的/lib/ext目錄下,如果jmeter是啟用的,則需要重新啟動下才能生效;jmeter沒啟用的情況下,則不需要。
界面配置
配置方式一樣,只是選擇不同的監聽方式而已,引入插件后,就多了兩種監聽方式,我們選擇JmeterInfluxDBBackendListenerClient,配置如下圖所示:

每個配置項的含義如下:
testName:測試名稱;在 testStartEnd 表中對應的字段是 testNamenodeName:節點名稱;在 testStartEnd 表中對應的字段是 nodeNameinfluxDBHost:InfluxDB安裝的服務器ipinfluxDBPort:端口;influxDB端口,默認是8086,不用改即可influxDBUser:數據庫用戶名influxDBPassword:數據庫密碼influxDBDatabase:數據庫名稱,我們之前配置的數據庫是jmeter,所以填入即可retentionPolicy:默認即可samplersList:取樣器列表;想收集哪些請求就填哪些,最好用正則去匹配useRegexForSamplerList:是否使用正則;如果true則使用,samplersList里可以匹配正則表達式
運行腳本
按自己所需配置完成后,運行腳本,我們通過客戶端查看數據,生成如下三張表:

requestsRaw表
主要是存儲請求信息數據,包含:請求時間,請求名稱,線程名稱等信息。如下所示:

testStartEnd表
主要是用於存儲事件信息,如下所示:

virtualUsers表
存儲線程相關信息,如下所示:

腳本生成數據的方式,就介紹到這了,離最終效果圖只差一步了喲。今天介紹了三種方式,配置Grafana監控面板時,也對應有三種模板,下期再來細說。
