Jmeter測試結果分析這一篇主要講述如何使用jmeter中Assertion對結果進行簡單的分類,以及當我們拿到測試結果后,我們應該如何去看待這些測試結果。

用過LoadRunner的人都知道,LoadRunner本身提供了很多函數可以對收集回來的結果進行一些初步的分析。例如可以做到判斷返回的結 果是否正確;判斷request的response time是否大于x秒之類的。相比起LoadRunner,Jmeter在這方面沒有那么強大,但是個人認為,對于一些編程基礎不是太好的測試人員來 說,Jmeter比LoadRunner易用性上面做得更出色。

Assertion--斷言,通常是用于對每一個request sampler進行額外驗證的工具。下面通過一個例子來介紹一下常用的幾個Assertions。

假設現在要進行一個登陸的壓力測試,下面是對pass的幾個定義:

1.正確login后,必須收到返回的身份驗證和用戶個人信息下載的完成信息;

2.響應時間不能超過150毫秒

3.返回的結果大小不能小于750bytes

根據以上的要求,我們在對應的request sampler下面添加了以下的Assertions。

A.Response Assertion

Response Field to Test -- 標示被檢查對象是什么?

Pattern Matching Rules -- 標明被檢查對象與驗證內容之間的關系,Contains(包含關系);Matches(匹配關系);Equals(相等關系);Not(非關系)

Pattern to Test -- 需要驗證的內容列表

B.Duration Assertion

Duration to Assert -- 允許的響應時間的最大值

C.Size Assertion

Size to Assert -- 對于返回結果文件大小的標準定義

二、結果分析

添加了以上的Assertions后,我運行了一次腳本。以下是存放結果的.jtl文件的內容:

timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,Latency
11/04/08 13:22:03,172,Do Login,200,OK,Thread Group 1-1,text,false,The operation lasted too long: It took 172 milliseconds, but should not have lasted longer than 150 milliseconds.,835,172
11/04/08 13:22:03,156,Do Login,200,OK,Thread Group 1-2,text,false,Test failed: text expected to contain /loginMsg="OK"/,633,156
11/04/08 13:22:03,156,Do Login,200,OK,Thread Group 1-3,text,false,The operation lasted too long: It took 156 milliseconds, but should not have lasted longer than 150 milliseconds.,839,156
11/04/08 13:22:03,156,Do Login,200,OK,Thread Group 1-4,text,false,The operation lasted too long: It took 156 milliseconds, but should not have lasted longer than 150 milliseconds.,836,156
11/04/08 13:22:03,78,Do Login,200,OK,Thread Group 1-5,text,true,,779,78
11/04/08 13:22:03,63,Do Login,200,OK,Thread Group 1-7,text,false,Test failed: text expected to contain /loginMsg="OK"/,570,63
11/04/08 13:22:03,141,Do Login,200,OK,Thread Group 1-6,text,false,The result was the wrong size: It was 721 bytes, but should have been greater than 750 bytes.,721,141
11/04/08 13:22:03,78,Do Login,200,OK,Thread Group 1-9,text,false,The result was the wrong size: It was 724 bytes, but should have been greater than 750 bytes.,724,78
11/04/08 13:22:03,204,Do Login,200,OK,Thread Group 1-10,text,false,The operation lasted too long: It took 204 milliseconds, but should not have lasted longer than 150 milliseconds.,1137,204
11/04/08 13:22:03,2985,Do Login,200,OK,Thread Group 1-8,text,false,Test failed: text expected to contain /loginMsg="OK"/,570,2985

我們可以看到,每一個Sampler都會經過Assertions的判斷,只要有一個不符合條件的都會標示為False。

其實除了以上講到Assertion,jmeter還提供了其他一些比較實用的Assertion,而我在這也不一一介紹了。

有興趣的可以看一下jmeter的user manual,然后再自己動手試驗一下。

前文再續,續接上一回。上一篇講了如何利用Assertion將測試結果進行初步的篩選。那么,當我們拿到了測試結果之后,我們應該如何去看待它們呢?它們又是怎么來的呢?

一、Listener的使用

用過LoadRunner的人應該都知道,LoadRunner會為我們提供一大堆圖標和曲線。但是在Jmeter里,我們只能找到幾個可憐的 Listener來方便我們查看測試結果。但是,對于初學者來說,一些簡單的結果分析工具可以使我們更容易理解性能測試結果的分析原理。所以,千萬別小看 這幾個簡單的Listener啊。

A.Aggregate Report 聚合報告

我們可以看到,通過這份報告我們就可以得到通常意義上性能測試所最關心的幾個結果了。

Samples -- 本次場景中一共完成了多少個Transaction

Average -- 平均響應時間

Median -- 統計意義上面的響應時間的中值

90% Line -- 所有transaction中90%的transaction的響應時間都小于xx

Min -- 最小響應時間

Max -- 最大響應時間

PS: 以上時間的單位均為ms

Error -- 出錯率

Troughput -- 吞吐量,單位:transaction/sec

KB/sec -- 以流量做衡量的吞吐量

B.View Results Tree 以樹狀列表查看結果

通過這個Listener,我們可以看到很詳細的每個transaction它所返回的結果,其中紅色是指出錯的transaction,綠色則為通過的。

如果你測試的場景會有很多的transaction完成,建議在這個Listener中僅記錄出錯的transaction就可以了。要做到這樣,你只需要將Log/Display:中的Errors勾中就可以了。

二、.jtl文件的分析

在性能測試過程中,我們往往需要將測試結果保存在一個文件當中,這樣既可以保存測試結果,也可以為日后的性能測試報告提供更多的素材。

Jmeter中,結果都存放在.jtl文件。這個.jtl文件可以提供多種格式的編寫,而一般我們都是將其以csv文件格式記錄,這樣做是因為csv文件格式看起來比較方便,更重要的是這樣做可以為二次分析提供很多便利。

我這里所說的二次分析是指除了使用Listener之外,我們還可以對.jtl文件進行再次分析。

a.設置jtl文件格式

我們從jmeter官方網站中下載下來的Jmeter解壓后是可以直接使用的。但是,使用默認配置生成的jtl文件內容并不能滿足我們的需要。于是 我們必須進行必要的設置。在2.2版本中,如果要修改jtl設置必須要到jmeter.properties文件中設置;但是在2.3版本中,我們只需要 在界面上設置就可以了。你只需要選擇某個Listener,點擊頁面中的configure按鈕。此時,一個設置界面就會彈出來,建議多勾選如下 項:Save Field Name,Save Assertion Failure Message。

b.jtl文件中的各項

經過了以上設置,此時保存下來的jtl文件會有如下項:

timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,Latency

請求發出的絕對時間,響應時間,請求的標簽,返回碼,返回消息,請求所屬的線程,數據類型,是否成功,失敗信息,字節,響應時間

其中聚合報告中的,吞吐量=完成的transaction數/完成這些transaction數所需要的時間;平均響應時間=所有響應時間的總和/完成的transaction數;失敗率=失敗的個數/transaction數

溫馨提示:在jmeter2.2和2.3版本中,都存在的一個問題是當我們重新打開jmeter,使用某個Listener來查看jtl文件 時,jmeter是會報錯的。因此當你使用命令行方式完成了一個場景的測試后,你得到的只是一堆保存在jtl文件中的原始數據。所以知道聚合報告中的各項 的來源是可以方便大家擺脫測試工具來進行結果的分析。

總的來說,對于jmeter的結果分析,主要就是對jtl文件中原始數據的整理,我是使用一些小腳本進行相關的分析的,不知道你打算怎么做呢?

反正實踐后,你總能找到一條屬于自己的數據分析之路。