提示:聚合報告元件的使用和察看結果樹元件的使用方式相同。本篇文章主要是詳細的介紹一下聚合報告元件內容,不做示例演示。
1、聚合報告介紹
在使用JMeter進行效能測試時,聚合報告(Aggregate Report
)可以說是必用的監聽器。
(1)聚合報告的生成方式
聚合報告有2中生成方式:
- 在已有
.jtl
檔案的情況下,直接選擇載入檔案即可生成聚合報告。 - 在執行JMeter的過程中,動態生成聚合報告。
提示:我們一直使用GUI模式操作JMeter,所以看到的聚合報告元件中的內容,是第二種生成方式。等之後我們介紹非GUI模式操作JMeter時,會講解第一種方式生成的聚合報告。
(2)聚合報告的資料來源
聚合報告中統計的資料來源,其實都是從統計的SampleResult
中收集的資料。
需要特別注意的是:
- 聚合報告中的每一行,代表一個請求。注意:同名的請求會只顯示一個,把結果合併。
- 聚合報告中的每一列資訊,是由
SamplingStatCalculator
類的不同方法實現統計的,相同名稱的請求會共用同一個SamplingStatCalculator
。 - 不管是JMeter實時生成聚合報告,還是根據已經存在
.jtl
結果檔案生成的聚合報告,最終的底層都是呼叫StatGraphVisualizer
類的add(sampleResult)
方法來生成表格的一行資料,傳遞的引數為每個請求的請求結果(sampleResult
)資訊。
add方法的呼叫時機:
1)根據.jtl
檔案生成報告時,每解析一行資料就呼叫一次add方法。
2)實時執行生成聚合報告,每請求一次,就呼叫一次add方法。
提示:
- 注意:使用聚合報告時,測試計劃中不要用相同的的請求取樣器名稱。
- 觀察聚合報告的結果發現,聚合報告是累加的,即每次執行的結果統計都是基於前一次執行的結果進行統計,包括髮起的請求樣本數等都是疊加的。
2、聚合報告介面詳解
新增聚合報告元件方式:選中“執行緒組”右鍵 —> 新增 —> 監聽器 —> 聚合報告
。
介面內容如下圖所示:
聚合報告介面說明:
- 名稱:聚合報告元件的自定義名稱,見名知意最好。
- 註釋:即新增一些備註資訊,對該聚合報告元件的簡短說明,以便後期回顧時檢視。
(1)將所有資料寫入一個檔案
在JMeter中,我們可以將指令碼測試中每個使用者的訪問內容,都儲存到一個檔案中。
需要操作聚合報告元件中的如下位置:
說明:
- 檔名:輸入一個檔案的完整路徑,字尾可以為
.csv
,.html
等。檔案若不存在,則建立該檔案;若已存在該檔案,執行結果選擇覆蓋原有檔案即可。 - 顯示日誌內容:
1)僅日誌錯誤:僅儲存錯誤的日誌資訊到檔案中。
2)僅成功日誌:僅儲存正常響應的日誌資訊到檔案中。 - 配置(
configure
):配置測試結果檔案中需要記錄的內容,可以依據自己需求來選擇。
如下圖所示:
提示:我們可以點選“瀏覽”按鈕,選擇已儲存的聚合報告檔案,來檢視之前指令碼的請求結果。
(2)聚合報告列表項介紹
Label
:請求的名稱,就是指令碼中Sampler
的名稱。# Samples
(樣本):總共發給伺服器的請求數量,如果模擬10個使用者,每個使用者迭代10次,那麼總的請求數為:10*10 =100次。Average
(平均值):預設情況下是單個Request
的平均響應時間,當使用了Transaction Controller
(事務控制器) 時,也可以用Transaction
的時間,來顯示平均響應時間 ,單位是毫秒。Median
(中位數):50%使用者的響應時間小於該值。90% Line
(90% 百分位):90%使用者的響應時間小於該值。95% Line
(95% 百分位):95%使用者的響應時間小於該值。99% Line
(99% 百分位):99%使用者的響應時間小於該值。Min
(最小值):最小的響應時間。Maximum
(最大值):最大的響應時間。Error%
(異常%):錯誤率=錯誤請求的數量/請求的總數。Throughput
(吞吐量):預設情況下表示每秒完成的請求數(Request per Second
)。Received KB/sec
(接收資料):每秒從伺服器端接收到的資料量。Sent KB/sec
(傳送):每秒傳送到伺服器端的資料量。
(3)儲存聚合報告報表
- 在標籤中包含組名稱?:需要就勾選,不需要則取消勾選。
- 儲存表格資料:就是儲存聚合報告頁面中顯示的表格內容,而不是使用者的請求日誌資訊。
- 儲存表格標題:需要就勾選。
3、聚合報告中資訊點說明
(1)百分位數的說明
1、科普:
90% Line
引數正確的含義
在這裡我覺得有必要說一下對 90%Line
的理解:
很多人都理解為:90%使用者的平均響應時間。我之前也一直這樣認為,但是後來才發現我錯了。
那看看JMeter 官網是怎麼說的?
90% Line - 90% of the samples took no more than this time. The remaining samples at least as long as this.
意思是:有 90% 的樣本不超過這個時間, 剩下的樣品至少只要等於或超過這個時間。
換句話說,就表示有90%的請求耗時,都在這個時間之內。
2、這裡涉及到一個數學中的概念:百分位數
百分位數:統計學術語,如果將一組資料從大到小排序,並計算相應的累計百分位,則某一百分位所對應資料的值,就稱為這一百分位的百分位數。可表示為:一組n個觀測值按數值大小排列,處於p%位置的值稱第p百分位數。
百分位通常用第幾百分位來表示,如以身高為例,身高分佈的第5百分位,表示有5%的人的身高小於此測量值,95%的身高大於此測量值。
3、再舉個例子:
有10個數:1、2、3、4、5、6、7、8、9、10
,按由小到大將其排列。
求它的第90%百分位,也就是第9個數剛好是9 ,那麼他的90%Line
就是9 。
4、那麼百分位數用在效能測試中有什麼意義呢?
它可以使用我們的分析結果更準確!
因為在評估一次測試的結果時,僅僅有平均響應時間是不夠的。假如在一次測試中,總共有100個請求被響應,其中最小響應時間為0.02秒,最大響應時間為110秒,平均事務響應時間為4.7秒。你會不會想到最小和最大響應時間,這樣如此大的偏差,是否會導致平均值本身並不可信?
如果我們把每個請求的響應時間用Excel統計出來,會發現那個最大值的出現機率,只不過是千分之一甚至萬分之一,剩下99%的使用者請求的響應時間,都是在效能需求所定義的範圍之內的。所以為了更準確的衡量整體請求的耗時情況,除了平均響應時間之外,還要有90%Line
、95%Line
、99%Line
來輔助統計。
總結一下,聚合報告中的百分位數的含意:
Median
:中位數,50%使用者的響應時間在小於該值,注意它與Average
平均響應時間的區別。90% Line
:90%使用者的響應時間小於該值。95% Line
:95%使用者的響應時間小於該值。99% Line
:99%使用者的響應時間小於該值。
(2)吞吐量說明
吞吐量(QPS):預設情況下表示每秒完成的請求數。
誤區:把吞吐量值當伺服器每秒處理的事務數的值(TPS)。
經常有的同學直接把聚合報告中的吞吐量當作TPS來看,這種做法是相當不嚴謹的。
那麼聚合報告中的吞吐量什麼情況下可以看成TPS?
從嚴格意義來講就是交易成功率為100%(一個完整的事務)。
還有一種情況是,交易失敗率在你可以接受的範圍內,也就是對當前測試整體結果影響不大,到了可以忽略的程度。
給大家舉個例子,大家都看過趙本山大叔的《鐘點工》小品,裡面有個經典的問題:把大象關進冰箱需要幾步?相信大家都知道答案。我們換種思維:假如我們把這個操作看成一個事務,如果找不到大象,或者沒有冰箱,這個事務都是無法完成的,也就是說這個事務最終會失敗(事務只有兩種狀態要麼成功要麼失敗)。
那麼這些步驟就不能算事務的完成,所以事務完成數和請求完成數之間還是有區別的。
參考: