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

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

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

假設(shè)現(xiàn)在要進行一個登陸的壓力測試,下面是對pass的幾個定義:

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

2.響應(yīng)時間不能超過150毫秒

3.返回的結(jié)果大小不能小于750bytes

根據(jù)以上的要求,我們在對應(yīng)的request sampler下面添加了以下的Assertions。

A.Response Assertion

Response Field to Test -- 標(biāo)示被檢查對象是什么?

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

Pattern to Test -- 需要驗證的內(nèi)容列表

B.Duration Assertion

Duration to Assert -- 允許的響應(yīng)時間的最大值

C.Size Assertion

Size to Assert -- 對于返回結(jié)果文件大小的標(biāo)準(zhǔn)定義

二、結(jié)果分析

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

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都會經(jīng)過Assertions的判斷,只要有一個不符合條件的都會標(biāo)示為False。

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

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

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

一、Listener的使用

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

A.Aggregate Report 聚合報告

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

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

Average -- 平均響應(yīng)時間

Median -- 統(tǒng)計意義上面的響應(yīng)時間的中值

90% Line -- 所有transaction中90%的transaction的響應(yīng)時間都小于xx

Min -- 最小響應(yīng)時間

Max -- 最大響應(yīng)時間

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

Error -- 出錯率

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

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

B.View Results Tree 以樹狀列表查看結(jié)果

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

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

二、.jtl文件的分析

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

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

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

a.設(shè)置jtl文件格式

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

b.jtl文件中的各項

經(jīng)過了以上設(shè)置,此時保存下來的jtl文件會有如下項:

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

請求發(fā)出的絕對時間,響應(yīng)時間,請求的標(biāo)簽,返回碼,返回消息,請求所屬的線程,數(shù)據(jù)類型,是否成功,失敗信息,字節(jié),響應(yīng)時間

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

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

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

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