Jmeter 使用筆記之 html 報告擴充套件(一)

2022-05-22 02:48:11 字數 4232 閱讀 2662

題記:在用 loadrunner 的時候可以生成乙個 html 的報告,並且裡面包含各種圖表,各種詳細的資料。而在使用 jmeter 測試完後並不能直接生成 html 的報告(無論是用 gui 還是命令列啟動)。

經過查詢資料發現 jmeter 的 extras 目錄下有生成 html 的 xsl 樣式表,其實 jenkins+ant+jmeter 生成的 html 報告也是呼叫了這裡的樣式表生成的,於是

通過 xsltproc report.jtl > test.html,或者 ant 也可以。這個命令把jmeter 的結果檔案轉換為 html 的報告。結果如下:

這裡雖然能生成 html 報告了,但是這個報告太弱了,基本不能用,包含的引數太少。所以需要對這個報告進行擴充套件。因為 jmeter 本身的聚合報告的資料還是比較全的,

因此打算按照那個報告的值進行擴充套件。

xsltproc,xlst介紹

xsl 指擴充套件樣式表語言(extensible stylesheet language),把 xml 轉換為html 用的就是 xls 編寫的樣式表,所以如果要擴充套件這個報告,首先要對 xls

熟悉,才能更改和擴充套件樣式表。可以在 這裡進行此語言的學習。

xsltproc 是乙個快速 xslt 引擎,它可以將通過 xsl 層疊樣式表把 xml 轉換為相應格式的檔案,比如:html,xhtml,pdf

比如將 xml 轉換為 html,使用格式如下:

xsltproc xsl-html.xsl hoto.xml -o html.html (這裡還可以直接把樣式表檔案寫入 jtl 檔案的 href 屬性中,直觀的告訴這個 xml 用哪個樣式表)

xls 中查詢 xml 用的 xpath,因此還需要對 xpath 熟悉,xsltproc 這個引擎用的是 xpath1.0 版本,因此在樣式表中使用 xpath 是不能使用 xpath2.0 的函式和一些屬性。 個人對 xpath 還算熟悉,但是對 xls 一點也不熟悉,沒辦法為了能夠擴充套件報告,直接學習 xls 和 xpath。(關於 xls 會再寫一遍部落格介紹,順便把使用過程中 的問題和經驗彙總)

如果直接使用 ant 和 jmeter 整合後也是可以直接生成的,但是 ant 轉換 html 的引擎也是只支援 xpath1.0,後來經過了解大部分的引擎都不支援xpath2.0,所以 期中不能使用 xpath2.0 的函式。

90%line 時間為了能夠顯示 90%line 的時間,首先要對這個指標熟悉,這個指標值得是一組資料,在 90% 的位置的資料的時間,所以我們擴充套件的時候只要知道了 90% 位置的索引,那麼就能取得這個值了。 以下是部分關鍵**

"allmediantime">  

call-template name="linetime">

with-param name="nodes" select="/testresults/*/@t" />

with-param name="position" select="ceiling($allcount * 0.9)" />

call-template>

這裡主要是獲得時間元素的集合,以及 90%line 的位置,有了這兩個引數後就可以進行後續的擴充套件了,擴充套件後的效果圖如下:

因為 90%line 和 95%line,99%line 計算原理都是一致的,因此只要計算出乙個值其他的值也很好計算

qps 擴充套件

jmeter 的具合報告有 throughput 這個值,這個在 loadrunner 中是表示為吞吐量的,這裡可以表示 qps 或者 tps(在使用了事務的情況下),個人把這個稱為 qps,因為更直觀。

和 %90line 同樣的道理,首先必須知道這個值是怎麼計算出來,經過查詢資料和官網的比較,發現這個值是通過如下的公式計算出來的:

官網的截圖:

total time = 測試結束時間 - 測試開始時間

測試結束時間 = max(請求開始時間 + elapsed time) 測試開始時間 = min(請求開始時間)

知道了公式,那麼計算就容易了,以下是關鍵**:

"nodethroughput">  

call-template name="throughput">

with-param name="nodes" select="/testresults/*/@ts" />

with-param name="count" select="$allcount" />

call-template>

擴充套件後的結果如下:

吞吐量擴充套件

在 loadrunner 中吞吐量就是 throughput,在 jmeter 的聚合報告中最後一列的值就是 loadrunner 中的 throughput,為了便於區分,我把這裡的值稱為throughput,

也就是吞吐量。

經過查詢資料發現吞吐量的計算和 qps 的計算公式是一樣的,因為也就是如下的公式:

throughput = (請求的總位元組數) / (total time)

這裡的 total time 計算和 qps 是一樣的,而總位元組數直接把所有請求的加起來即可,關鍵**如下:

"nodekb">  

call-template name="throughput">

with-param name="nodes" select="/testresults/*/@ts" />

with-param name="count" select="sum(/testresults/*/@by) div 1024" />

call-template>

因為這裡顯示的位元組,最後的結果我打算以 kb 的單位顯示,因此這裡需要除以1024,擴充套件後的結果如下

tps擴充套件

tps 在 jmeter 中雖然某些情況和 qps 是一致的,但是還是有不一致的地方,因此這裡也需要擴充套件,這樣的結果看著更清晰明了。

首先和其他的引數擴充套件一樣,需要知道計算公式,這裡的計算公式和 qps 也是一樣的,只是資料的集合不一樣,以下是擴充套件後的效果。

在擴充套件的過程中進一步發現 jmeter 的聚合結果中最後的」總體「一行在某些情況下計算的數值是不準確的。如果指令碼中不包含事務,那麼這裡的結果是準確的,如果都包含事務並且把

generate parent sample 選中後這裡的結果也是準確的,在指令碼中有事務並且沒有選中 generate parent sample,或者有些有事務有些沒有時,這時的結果就不準確了,因為檢視計算

方式發現它把所有的請求都算進去了。

比如,乙個 jtl 檔案中即包含 http 請求也包含事務,因為事務只是對之前請求的乙個統計,本身是不傳送請求的,所以計算總的吞吐量、qps,tps 時是不能這麼算的。

所以在擴充套件的過程中分成了兩個樣式表,乙個樣式表處理包含事務,或者沒有事務的情況,這時的結果以 qps 衡量;乙個樣式表處理全都是事務的情況,這時候的結果以 tps 衡量,這樣

就準確了。

測試擴充套件了好幾個指標,這些指標的正確性如何呢?需要在多種情況下進行測試,經過測試後各個指標都是正確的。但是還沒有在大的資料量級別下測試,如果測試後發現**會有問題,會及時

更改。切記:由於樣式表中是按照 lb 進行請求區分的,因此這裡的 lable 不能重複,本身也不應該重複,包括 jmeter 的聚合報告都是以 lable 進行區分的

ps:在擴充套件過程中的難點一是公式如何計算的,二是xls這個 指擴充套件樣式表語言不是很熟悉,本身也有很多限制,會在下個部落格中說明。但是用過後感覺還是很不錯的既熟悉了 xpath 還熟悉了 xls。

三是需要對 jmeter 的測試結果檔案每個字段戴錶什麼意思熟悉,這樣才能定製更多的指標,這個也會在單獨的部落格中說明

Jmeter 使用筆記之 html 報告擴充套件(一)

題記 在用 loadrunner 的時候可以生成乙個 html 的報告,並且裡面包含各種圖表,各種詳細的資料。而在使用 jmeter 測試完後並不能直接生成 html 的報告 無論是用 gui 還是命令列啟動 經過查詢資料發現 jmeter 的 extras 目錄下有生成 html 的 xsl 樣式...

Jmeter 使用筆記之 html 報告擴充套件(一)

題記 在用 loadrunner 的時候可以生成乙個 html 的報告,並且裡面包含各種圖表,各種詳細的資料。而在使用 jmeter 測試完後並不能直接生成 html 的報告 無論是用 gui 還是命令列啟動 經過查詢資料發現 jmeter 的 extras 目錄下有生成 html 的 xsl 樣式...

python小白之list使用筆記

list常見用法 i array 4.2.print i newaxis 將原本在乙個列表裡的兩個數拆為兩個不同列表裡 num 1,2,3 name wu wang zhao people num name print people num.extend name num len num len n...