1.什么是監聽器,有什么作用?
監聽器用來監聽及顯示JMeter取樣器測試結果,能夠以樹、表及圖形形式顯示測試結果,也可以以文件方式保存測試結果,JMeter測試結果文件格式多樣,比如XML格式、CSV格式。默認情況下,測試結果將被存儲為xml格式的文件,文件的后綴: ".jtl"。另外一種存儲格式為CSV文件,該格式的好處就是效率更高,但存儲的信息不如xml格式詳細。
2.Jmeter監聽器預覽
首先我們來看一下JMeter的監聽器,路徑:線程組(用戶)->添加->監聽器;我們可以清楚地看到JMeter5中共有16個監聽器如下圖所示:

3.Jmeter解釋器詳解
3.1 察看結果樹
察看結果樹,顯示取樣器請求和響應的細節以及請求結果,包括消息頭,請求的數據,響應的數據。
(1)察看結果樹,放的位置不同,查看的結果也不同。在線程組下添加察看結果樹,查看線程組下所有請求的結果;放在具體某個請求下,只查看此請求的結果;若放在某個控制器節點下,則查看此控制器下節點執行的結果;
(2)該監聽器推薦做調試用,在實際運行壓測時,應該禁用,因為大量請求時,啟用該監聽器時打印的日志比較多,會造成大IO消耗,影響壓力機性能。
1、添加 察看結果樹 ,路徑:線程組 > 添加 > 監聽器 > 察看結果樹,如下圖所示:

2、關鍵參數說明如下:
名稱:控制器的描述性名稱,顯示在左邊節點上,並用於命名事務
注釋:控制器注釋信息,非必填項
文件名:載入文件名
Log/Display Only: 僅日志錯誤、Success ;勾選中顯示對應的日志信息
Configure:定義report中自己所關心的數據項。
取樣器結果:
Thread Name: 線組名稱
Sample Start: 啟動開始時間
Load time: 加載時長
Latency: 等待時長
Size in bytes: 發送的數據總大小
Headers size in bytes: 發送頭大小
Body size in bytes: 發送數據的其余部分大小
Sample Count: 發送統計
Error Count: 錯誤統計
Response code: 返回碼
Response message: 返回消息
Response headers:返回頭信息
請求
數據獲取方式、路徑、地址等以及傳遞的參數、cookie
響應數據
響應加載的頁面html
3、作用
1)查看請求結果,請求成功的測試通常為綠色;紅色則代表失敗。
注:在沒有對請求斷言的情況下,顯示綠色並不一定是成功,只代表響應碼是200或300系列,顯示紅色說明響應碼是400或500系列。所以要想確定請求返回的是正確的,必須要加上斷言,只有斷言成功才會顯示綠色。
2)查看對應Sampler的測試結果的請求、響應數據。
- 取樣器結果:顯示的是取樣器相關參數(客戶端參數與響應參數)
- 請求:發送請求的具體內容
- 響應數據:服務器返回的相應參數
3.2 匯總報告
匯總報告,為測試中的每個不同命名的請求創建一個表行。這與聚合報告類似,只是它使用更少的內存。提供了最簡要的測試結果信息,同時可以配置將相應的信息保存至指定的文件中(支持xml、csv格式的文件)。單擊Configure按鈕,可以配置結果保存各種選項
1、添加 匯總報告 ,路徑:線程組 > 添加 > 監聽器 > 匯總報告,如下圖所示:

2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Label 取樣器別名,如果勾選Include group name ,則會添加線程組的名稱作為前綴
# Samples 取樣器運行次數
Average 請求(事務)的平均響應時間
Min 請求的最小響應時間
Max 請求的最大響應時間
Std. Dev 響應時間的標准方差
Error % 事務錯誤率
Throughput 吞吐量 也就是TPS
Received KB/sec 每秒收到的千字節
Sent KB/sec 每秒發送的千字節
Avg. Bytes 響應平均流量
3.3聚合報告
聚合報告,記錄這次性能測試的總請求數、錯誤率、用戶響應時間(中間值、90%、最少、最大)、吞吐量等,用以幫助分析被測試系統的性能。在聚合報告中,各個響應時間不能超過客戶的要求,就是合格,例如不能超過響應時間3s,大於3s就是不合格的.聚合報告應該是最詳細的報告了,也是最為常用的報告。是在壓測過程中最常用的監聽器。該監聽器對於每個請求,它統計響應信息並提供請求數,平均值,最大,最小值,中位數、90%、95%、錯誤率,吞吐量(以請求數/秒為單位)和以kb/秒為單位的吞吐量。單擊Configure按鈕,
1、添加 聚合報告 ,路徑:線程組 > 添加 > 監聽器 > 聚合報告,如下圖所示:

2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Label :每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這里顯示的就是 Name 屬性的值
#Samples :表示測試中一共發出了多少個請求,如果模擬10個用戶,每個用戶迭代10次,那么這里就顯示對應的 HTTP Request的執行次數是100
Average :平均響應時間——默認情況下是單個 Request 的平均響應時間,當使用了 Transaction Controller 時,也可以以Transaction 為單位顯示平均響應時間
Median :50%用戶的響應時間
90%Line :90%用戶的響應時間
Min :最少響應時間
Max :最大響應時間
Error% :本次運行測試中出現錯誤的請求的數量/請求的總數
Throughput :吞吐量,默認情況下表示每秒完成的請求數(Request per Second),當使用了 Transaction Controller 時,也可以表示類似 LoadRunner 的 Transaction per Second 數
(接收/發送)KB/sec :每秒從服務器端接收到的數據量,相當於LoadRunner中的Throughput/Sec
3.4后端監聽器
后端監聽器,是一個異步偵聽器,可以將數據推入都數據庫中,提供了InfluxDB,graphite選項
1、添加 后端監聽器,路徑:線程組 > 添加 > 監聽器 > 后端監聽器,如下圖所示:

2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Backend Listener implementation:BackendListenerClient類的實現,Jmeter默認提供如下兩種實現,因為我們使用的influxdb作為持久存儲
org.apache.jmeter.visualizers.backend.graphite.GraphiteBackendListenerClient
org.apache.jmeter.visualizers.backend.graphite.InfluxdbBackendListenerClient 因為我們使用的influxdb作為持久存儲,所以后續只介紹InfluxdbBackendListenerClient
Async Queue size:異步隊列大小 隊列值包含異步處理時的度量標准。除非有一些特定的性能問題,否則最好不要從默認的5000。
3、我們使用InfluxdbBackendListenerClient
- influxdbMetricsSender:org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender
- influxdbUrl:influx數據庫的url。example : http://influxHost:8086/write?db=jmeter
- application:被測試的應用名稱。此值也作為名為“application”的標記存儲在“events”中
- measurement:使用默認的”jmeter“就行
- summaryOnly:為true的情況下,只輸出所有請求的集合數據報告,為flase的情況下,輸出每條數據的詳情報告、
- samplersRegex:正則表達式將與樣本名稱匹配並發送到后端。默認匹配所有
- testTitle:測試名稱。默認的設置為 Test name。該值作為名為“text”的字段存儲在“事件”度量中。 JMeter在測試的開始和結束時自動生成一個注釋,其值以'started'和'ended'結尾
- percentiles:要發送到后端的百分位數,多個值已
;分割 - TAG_WhatEverYouWant:自定義標簽。您可以根據需要添加任意數量的自定義標簽。對於它們中的每一個,只需創建一個新行並在其名稱前加“TAG_”
3.5匯總圖
匯總圖,我們可以看到表格顯示的結果與圖形結果,絕大多數都是對圖形的設置。
1、添加 匯總圖 ,路徑:線程組 > 添加 > 監聽器 > 匯總圖,如下圖所示:

2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Column settings
- Columns to display 選擇要在圖表中顯示的列
- Rectangles color 單擊右側顏色矩形打開彈出對話框,選擇自定義顏色。(就是點擊
)
- Foreground color 允許更改值文本顏色
- Value font 允許定義文本的字體設置
- Draw outlines bar? 在條形圖上繪制或不繪制邊界線
- Show number grouping? 是否顯示Y軸標簽中的數字分組
- Value labels vertical? 更改值標簽的方向。(默認為水平)
- Column label selection 按結果標簽過濾
Title
在圖表的頭部定義圖表的標題
Graph size
根據當前JMeter窗口大小的寬度和高度計算圖形大小。使用“ 寬度”和“ 高度”字段定義自定義大小。單位是像素。
X Axis settings
定義X軸標簽的最大長度(以像素為單位)
Y Axis settings
為Y軸定義自定義最大值。
Legend
定義圖表圖例的放置和字體設置
3.6 斷言結果
斷言結果,對相應的請求添加斷言。對取樣器進行斷言后,我們希望知道斷言結果;此元件可以幫助我們顯示斷言結果(察看結果樹元件中也可以看到)。消耗了大量資源(內存和CPU),性能測試時候不建議使用。
作用:用於檢查測試中得到的響應數據等是否符合預期,用以保證性能測試過程中的數據交互與預期一致,一般與結果樹結合使用。
1、添加 斷言結果 ,路徑:線程組 > 添加 > 監聽器 > 斷言結果,如下圖所示:

2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空。
3.7比較斷言可視化器
比較斷言可視化器,和比較斷言配合使用。
1、添加 比較斷言可視化器 ,路徑:線程組 > 添加 > 監聽器 > 比較斷言可視化器,如下圖所示:

2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空。
3.8 生成概要結果
生成概要結果,該測試元素可以放置在測試計划中的任何位置。生成到目前為止對日志文件和/或標准輸出的測試運行的摘要。顯示了運行總計和差異總計。在適當的時間邊界每n秒(默認為30秒)生成一次輸出,因此將同步在同一時間運行的多個測試。
1、添加 生成概要結果 ,路徑:線程組 > 添加 > 監聽器 > 生成概要結果,如下圖所示:

2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空。
3.9 圖形結果
圖形結果,通過圖形展示出本次性能測試數據的分布。 圖形結果一般作為聚合報告的分析輔佐
1、添加 圖形結果 ,路徑:線程組 > 添加 > 監聽器 > 圖形結果,如下圖所示:

2、關鍵參數說明如下:
名稱:控制器的描述性名稱,顯示在左邊節點上,並用於命名事務
注釋:控制器注釋信息,非必填項
文件名:載入文件名
Throught:吞吐量,可以理解成TPS(TPS表示每秒通過的事物數,QPS表示每秒查詢接口數。jmeter中如果只有單接口,那么TPS=QPS。如果是多接口的混合場景,只有在事物控制器下執行,才能將其理解為TPS)
-
樣本數目。在這里,我們可以把樣本數量簡單理解成是jmeter一共向服務器發起了多少次請求;
-
最新樣本。jmeter最后一次發送請求的響應時間。單位是毫秒;
-
平均。所有請求響應時間的平均值。單位是毫秒;
-
偏離。標准方差,學過統計學的同學應該知道這個概念。如果你對這個概念一無所知也沒有關系,偏離越小就代表測試的總體結果與平均值越接近;
-
吞吐量。被測系統每分鍾能處理的請求個數,這是判斷服務器性能好壞的重要指標(也可以說是最重要的指標)。在上面的圖形結果報表里我們可以看到系統的吞吐量是138.985每分鍾,這就代表着系統每分鍾可以處理138.985個請求;
-
中值。就是響應時間的中間值,學術一點中值指的是有50%的值大於這個值,另外50%的值小於這個值。蒙圈了吧?實際上中值指的是如果有9個數,那么我們從小到大排列這些數,排在第5個的數就是這一組數的中值。那么如果有10個數呢?10個數的話第5個和第6個數的平均值就是這組數字的中值;
3.10 JSR223 Listener
JSR223 Listener,允許將JSR223腳本代碼應用於示例結果。
1、添加 SR223 Listener ,路徑:線程組 > 添加 > 監聽器 > JSR223 Listener,如下圖所示:

2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Label 取樣器別名,如果勾選Include group name ,則會添加線程組的名稱作為前綴
# Samples 取樣器運行次數
Average 請求(事務)的平均響應時間
Min 請求的最小響應時間
Max 請求的最大響應時間
Std. Dev 響應時間的標准方差
Error % 事務錯誤率
Throughput 吞吐量 也就是TPS
Received KB/sec 每秒收到的千字節
Sent KB/sec 每秒發送的千字節
Avg. Bytes 響應平均流量
3.11郵件觀察儀
郵件觀察儀, 如果測試運行從服務器收到太多失敗的響應,則可以將郵件程序可視化工具設置為發送電子郵件,這個不錯,起到及時通知效果,下面我使用的是163 SMTP進行測試。可以實現。
1、添加 郵件觀察儀 ,路徑:線程組 > 添加 > 監聽器 > 郵件觀察儀,如下圖所示:

2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Message中
From代表,發件人
Address代表 收件人
Success Limit 代表成功次數大於x時發送郵件
Failure Limit 代表失敗事務大於4時,發送郵件
SMTP sever
Host 填寫郵件服務器名稱
Login發件人的郵箱地址
Password 將smtp服務開啟,生成授權碼當作密碼
Connection Security 選擇協議
點擊TestMail 測試下是否可以發送成功,就可以投入使用了
3.12響應時間圖
響應時間圖,響應時間圖形監聽器。有點和我們之前介紹的Aggregate Graph類似
1、添加 響應時間圖,路徑:線程組 > 添加 > 監聽器 > 響應時間圖,如下圖所示:

2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
2.1 Graph setting 圖片設置
2.2 Interval:橫坐標的刻度
2.3 Title 標題 默認
2.4 Line setting 線條設置 默認
2.5 Graph size 圖片尺寸 默認
2.6 X Axis 橫坐標 默認
2.7 Y Aixs 縱坐標
2.8 Scale maximum value 縱坐標長度
2.9 increment scale 縱坐標的刻度 ;Legend 字體設置 默認
- Interval (ms) X軸間隔的時間(以毫秒為單位)
- Sampler label selection 按結果標簽過濾。可以使用正則表達式
- Title 在圖表的頭部定義圖表的標題
- Line settings 定義線條的寬度
- Graph size 根據當前JMeter窗口大小的寬度和高度計算圖形大小。使用“ 寬度”和“ 高度”字段定義自定義大小。單位是像素。
- X Axis settings 自定義X軸標簽的日期格式
- Y Axis settings 為Y軸定義自定義最大值(以毫秒為單位)
- Legend 定義圖表圖例的放置和字體設置
3.13保存響應到文件
保存響應到文件,我們可以看到表格顯示的結果與圖形結果,看着挺復雜,其實稍微翻譯一下就知道,絕大多數都是對圖形的設置。
1、添加 保存響應到文件 ,路徑:線程組 > 添加 > 監聽器 > 保存響應到文件,如下圖所示:

2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
文件名稱前綴:設置響應文件所在路徑(路徑必須已存在)和文件前綴
Save Failed Responses only:只保存失敗的響應
Save Successful Responses only:只保留成功的響應
Don't add number to prefix:不添加數字到文件名前綴
Don't add suffix:不添加文件后綴,即擴展名(注:默認情況下,jmeter會根據服務器返回的結果自動生成合適類型的文件,比如服務器返回json格式的內容,jmter會自動生成.json文件)
Add timestamp:添加時間戳到文件前綴
Minimum Length of sequence number :最小序列號,不填默認從1開始。
3.14 簡單數據寫入器
簡單數據寫入器,對用來記錄取樣器響應結果,不會以圖形方式顯示。配合NON GUI模式使用。
1、添加 簡單數據寫入器 ,路徑:線程組 > 添加 > 監聽器 > 簡單數據寫入器,如下圖所示:

2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空。
3.15 用表格查看結果
用表格查看結果,這個listener用來顯示每個請求的響應頭信息,我覺得它最好用的一點就是可以按先后順序顯示每個請求的開始時間、耗時、響應狀態等,方便進行結果分析。
1、添加 用表格查看結果 ,路徑:線程組 > 添加 > 監聽器 > 用表格查看結果,如下圖所示:

2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空。
Sample # : 一個系列號,我們線程用戶設置了5,這里就有5個號
Start Time:每個用戶的開始時間,我們設置了1秒進5個用戶,所以,每個用戶進入時間不同,這里精確到毫秒。
Thread Name:線程名稱,注意1-1,1-5,第一個1我也不知道表示什么,后面的1到5很好理解,就是用戶1到用戶5.
Label:就是Http reques的名稱
Sampler Time:運行這個Sampler所消耗的時間,有時候也等於Duration time
Status:執行結果標記,成本綠勾,失敗紅叉。
Bytes:請求的響應文件大小
Sent Byte:發送HTTP請求的數據包大小
Latency:這個字面意思是潛伏時間,不是延遲,暫時不好理解和解釋。一個網絡術語
Connet Time: 連接到服務器消耗的時間。
3.16 BeanShell Listener
BeanShell Listener,通過BeanShell 監聽器可以訪問JMeter提供的屬性和變量
1、我們先來看看這個 BeanShell Listener 長得是啥樣子,路徑:線程組 > 添加 > 監聽器 > BeanShell Listener,如下圖所示:

2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空。
