JMeter 是一個(gè)流行的用于負(fù)載測(cè)試的開源工具, 具有許多有用的功能元件,如線程組(thread group), 定時(shí)器(timer), 和HTTP 取樣 (sampler) 元件。 本文是對(duì)JMeter 用戶手冊(cè)的補(bǔ)充,而且提供了關(guān)于使用Jmeter的一些模擬元件開發(fā)質(zhì)量測(cè)試腳本的指導(dǎo)。
本文同時(shí)也討論了一項(xiàng)重要的內(nèi)容:在指定了精確的響應(yīng)時(shí)間要求后,如何來(lái)校驗(yàn)測(cè)試結(jié)果,特別是在采用了置信區(qū)間分析這種嚴(yán)格的統(tǒng)計(jì)方式的情況下應(yīng)如何操作。請(qǐng)注意,我假定本文的讀者們了解關(guān)于Jmeter的基礎(chǔ)知識(shí),本文的例子基于Jmeter2。0。3版。
確定一個(gè)線程組的ramp-up period (Determine)
Jmeter腳本的第一個(gè)要素是線程組(Thread Group),因此首先讓我們來(lái)回顧一下。 正如圖一所示,線程組需要設(shè)置以下參數(shù):
·線程數(shù)量。
·ramp-up period。
·運(yùn)行測(cè)試的次數(shù)。
·啟動(dòng)時(shí)間:立即或者預(yù)定的時(shí)間,如果是后者,線程組所包含的元素也要指定這個(gè)起止時(shí)間。
圖 1。 JMeter 線程組(JMeter Thread Group)
每個(gè)線程均獨(dú)立運(yùn)行測(cè)試計(jì)劃。因此, 線程組常用來(lái)模擬并發(fā)用戶訪問。如果客戶機(jī)沒有足夠的能力來(lái)模擬較重的負(fù)載,可以使用Jmeter的分布式測(cè)試功能來(lái)通過(guò)一個(gè)Jmeter控制臺(tái)來(lái)遠(yuǎn)程控制多個(gè)Jmeter引擎完成測(cè)試。
參數(shù) ramp-up period 用于告知JMeter 要在多長(zhǎng)時(shí)間內(nèi)建立全部的線程。默認(rèn)值是0。如果未指定ramp-up period ,也是說(shuō)ramp-up period 為零, JMeter 將立即建立所有線程,假設(shè)ramp-up period 設(shè)置成T 秒, 全部線程數(shù)設(shè)置成N個(gè), JMeter 將每隔T/N秒建立一個(gè)線程。
線程組的大部分參數(shù)是不言自明的,只有ramp-up period有些難以理解, 因?yàn)槿绾卧O(shè)置適當(dāng)?shù)闹挡⒉蝗菀住?首先,如果要使用大量線程的話,ramp-up period 一般不要設(shè)置成零。 因?yàn)槿绻O(shè)置成零,Jmeter將會(huì)在測(cè)試的開始建立全部線程并立即發(fā)送訪問請(qǐng)求, 這樣一來(lái)很容易使服務(wù)器飽和,更重要的是會(huì)隱性地增加了負(fù)載,這意味著服務(wù)器將可能過(guò)載,不是因?yàn)槠骄L問率高而是因?yàn)樗芯程的第一次并發(fā)訪問而引起的不正常的初始訪問峰值,可以通過(guò)Jmeter的聚合報(bào)告監(jiān)聽器看到這種現(xiàn)象。
這種異常不是我們需要的,因此,確定一個(gè)合理的ramp-up period 的規(guī)則是讓初始點(diǎn)擊率接近平均點(diǎn)擊率。當(dāng)然,也許需要運(yùn)行一些測(cè)試來(lái)確定合理訪問量。
基于同樣的原因,過(guò)大的ramp-up period 也是不恰當(dāng)?shù)模驗(yàn)閷?huì)降低訪問峰值的負(fù)載,換句話說(shuō),在一些線程還未啟動(dòng)時(shí),初期啟動(dòng)的部分線程可能已經(jīng)結(jié)束了。
那么,如何檢驗(yàn)ramp-up period I太小了或者太大了呢?首先,推測(cè)一下平均點(diǎn)擊率并用總線程除點(diǎn)擊率來(lái)計(jì)算初始的ramp-up period。 例如,假設(shè)線程數(shù)為100, 估計(jì)的點(diǎn)擊率為每秒10次, 那么估計(jì)的理想ramp-up period 是 100/10 = 10 秒。 那么,應(yīng)怎樣來(lái)提出一個(gè)合理的估算點(diǎn)擊率呢?沒有什么好辦法,必須通過(guò)運(yùn)行一次測(cè)試腳本來(lái)獲得。
其次, 在測(cè)試計(jì)劃(test plan)中增加一個(gè)聚合報(bào)告監(jiān)聽器,如圖2所示,其中包含了所有獨(dú)立的訪問請(qǐng)求(一個(gè)samplers)的平均點(diǎn)擊率。 第一次取樣的點(diǎn)擊率(如http請(qǐng)求)與ramp-up period 和線程數(shù)量密切相關(guān)。通過(guò)調(diào)整ramp-up period 可以使首次取樣的奠基率接近平均取樣的點(diǎn)擊率。