您的位置:軟件測試 > 開源軟件測試 > 開源性能測試工具 > Jmeter
Jmeter使用技巧集錦
作者:頑強(qiáng)的小逗比 發(fā)布時間:[ 2017/6/26 11:07:18 ] 推薦標(biāo)簽:性能測試工具 Jmeter

  JMeter是一個流行的用于負(fù)載測試的開源工具,具有許多有用的功能元件,如線程組(threadgroup),定時器(timer),和HTTP取樣(sampler)元件。本文是對JMeter用戶手冊的補(bǔ)充,而且提供了關(guān)于使用Jmeter的一些模擬元件開發(fā)質(zhì)量測試腳本的指導(dǎo)。
  本文同時也討論了一項(xiàng)重要的內(nèi)容:在指定了精確的響應(yīng)時間要求后,如何來校驗(yàn)測試結(jié)果,筆者是在采用了置信區(qū)間分析這種嚴(yán)格的統(tǒng)計方式的情況下應(yīng)如何操作。請注重,我假定本文的讀者們了解關(guān)于Jmeter的基礎(chǔ)知識,本文的例子基于Jmeter2。0。3版。
  確定一個線程組的ramp-upperiod(Determine)
  Jmeter腳本的第一個要素是線程組(ThreadGroup),因此首先讓我們往返顧一下。正如圖一所示,線程組需要設(shè)置以下參數(shù):
  ·線程數(shù)量。
  ·ramp-upperiod。
  ·運(yùn)行測試的次數(shù)。
  ·啟動時間:立即或者預(yù)定的時間,假如是后者,線程組所包含的元素也要指定這個起止時間。

  圖1:JMeter線程組(JMeterThreadGroup)

  每個線程均獨(dú)立運(yùn)行測試計劃。因此,線程組常用來模擬并發(fā)用戶訪問。假如客戶機(jī)沒有足夠的能力來模擬較重的負(fù)載,可以使用Jmeter的分布式測試功能來通過一個Jmeter控制臺來遠(yuǎn)程控制多個Jmeter引擎完成測試。
  參數(shù)ramp-upperiod用于告知JMeter要在多長時間內(nèi)建立全部的線程。默認(rèn)值是0。假如未指定ramp-upperiod,也是說ramp-upperiod為零,JMeter將立即建立所有線程,假設(shè)ramp-upperiod設(shè)置成T秒,全部線程數(shù)設(shè)置成N個,JMeter將每隔T/N秒建立一個線程。
  線程組的大部分參數(shù)是不言自明的,只有ramp-upperiod有些難以理解,因?yàn)槿绾卧O(shè)置適當(dāng)?shù)闹挡⒉惠p易。首先,假如要使用大量線程的話,ramp-upperiod一般不要設(shè)置成零。因?yàn)榧偃缭O(shè)置成零,Jmeter將會在測試的開始建立全部線程并立即發(fā)送訪問請求,這樣一來很輕易使服務(wù)器飽和,更重要的是會隱性地增加了負(fù)載,這意味著服務(wù)器將可能過載,不是因?yàn)槠骄L問率高而是因?yàn)樗芯程的第一次并發(fā)訪問而引起的不正常的初始訪問峰值,可以通過Jmeter的聚合報告監(jiān)聽器看到這種現(xiàn)象。
  這種異常不是我們需要的,因此,確定一個合理的ramp-upperiod的規(guī)則是讓初始點(diǎn)擊率接近平均點(diǎn)擊率。當(dāng)然,也許需要運(yùn)行一些測試來確定合理訪問量。
  基于同樣的原因,過大的ramp-upperiod也是不恰當(dāng)?shù),因(yàn)閷档驮L問峰值的負(fù)載,換句話說,在一些線程還未啟動時,初期啟動的部分線程可能已經(jīng)結(jié)束了。
  那么,如何檢驗(yàn)ramp-upperiodI太小了或者太大了呢?首先,推測一下平均點(diǎn)擊率并用總線程除點(diǎn)擊率來計算初始的ramp-upperiod。例如,假設(shè)線程數(shù)為100,估計的點(diǎn)擊率為每秒10次,那么估計的理想ramp-upperiod是100/10=10秒。那么,應(yīng)怎樣來提出一個合理的估算點(diǎn)擊率呢?沒有什么好辦法,必須通過運(yùn)行一次測試腳本來獲得。
  其次,在測試計劃(testplan)中增加一個聚合報告監(jiān)聽器,如圖2所示,其中包含了所有獨(dú)立的訪問請求(一個samplers)的平均點(diǎn)擊率。第一次取樣的點(diǎn)擊率(如http請求)與ramp-upperiod和線程數(shù)量密切相關(guān)。通過調(diào)整ramp-upperiod可以使首次取樣的奠基率接近平均取樣的點(diǎn)擊率。

  圖2:JMeter聚合報告

  第三,查驗(yàn)一下Jmeter日志(文件位置:JMeter_Home_Directory/bin)的后一個線程開始時第一個線程是否真正結(jié)束了,二者的時間差是否正常。
  總之,是否能確定一個適當(dāng)?shù)膔amp-uptime取決于以下兩條規(guī)則:
  ·第一個取樣器的點(diǎn)擊率(hitrate)是否接近其他取樣器的平均值,從而能否避免ramp-upperiod過小。
  ·在后一個線程啟動時,第一個線程是否在真正結(jié)束了,好二者的時間要盡可能的長,以避免ramp-upperiod過大。
  有時,這兩條規(guī)則的結(jié)論會互相沖突。這意味著無法找到同時滿足兩條規(guī)則的合適的ramp-upperiod。糟糕的測試計劃通常會導(dǎo)致這些問題,這是因?yàn)樵谶@樣的測試計劃里,取樣器將不能充分地采集數(shù)據(jù),可能因?yàn)闇y試計劃執(zhí)行時間太短并且線程會很快的運(yùn)行結(jié)束。
  用戶思考時間(Userthinktime),定時器,和代理服務(wù)器(PRoxyserver)
  在負(fù)載測試中需要考慮的的一個重要要素是思考時間(thinktime),也是在兩次成功的訪問請求之間的暫停時間。有多種情形揮發(fā)導(dǎo)致延遲的發(fā)生:用戶需要時間閱讀文字內(nèi)容,或者填表,或者查找正確的鏈接等。未認(rèn)真考慮思考時間經(jīng)常會導(dǎo)致測試結(jié)果的失真。例如,估計數(shù)值不恰當(dāng),也是被測系統(tǒng)可以支持的多用戶量(并發(fā)用戶)看起來似乎要少一些等。
  當(dāng)我們進(jìn)入正在的負(fù)載測試后,如果發(fā)現(xiàn)事務(wù)控制器的時間比所有子組件的時間之和差距過大,那么說明Jmeter本身的性能出問題了?梢钥紤]通過如下三種方式進(jìn)行處理:
  一、修改Jmeter.bat文件,調(diào)整JVM參數(shù),將heap和permsize值適當(dāng)?shù)脑O(shè)置大一點(diǎn)。
  二、聯(lián)機(jī)負(fù)載,減少單臺機(jī)器上的負(fù)載線程數(shù)。
  三、采用命令模式運(yùn)行測試。
  Jmeter提供了一整套的計時器(timer)來模擬思考時間(thinktime),但是仍然存在一個問題::如何確定適當(dāng)?shù)乃伎紩r間呢?幸運(yùn)的是,JMeter提供了一個不錯的答案:使用JMeterHTTP代理服務(wù)器(ProxyServer)元件。
  代理服務(wù)器會記錄在使用一個普通的瀏覽器(如Firefox或InternetEXPlorer)瀏覽一個web應(yīng)用時的操作。另外,JMeter在記錄操作的同時會建立一個測試計劃(testplan)。這個功能能提供以下便利:
  不必手工建立HTTP訪問請求,尤其是當(dāng)要設(shè)置一些令人乏味的參數(shù)時(然而,非英文的參數(shù)也許不能正常工作)。JMeter將會錄制包括隱含字段(hiddenfields)在內(nèi)的所有內(nèi)容。
  在生成的測試計劃中,Jmeter會包含瀏覽器生成的所有的HTTP報頭,如User-Agent(e。g。,Mozilla/4。0),或AcceptLanguage(e。g。,zh-tw,en-us;q=0。7,zh-cn;q=0。3)等。
  JMeter會根據(jù)設(shè)置在錄制操作的同時建立一些定時器,其延遲時間是完全根據(jù)真實(shí)的操作來設(shè)置的
  現(xiàn)在讓我們來看一下如何配置Jmeter的錄制功能。在JMeter的控制臺上,在工作臺(WorkBench)元件上單擊右鍵,然后選擇”addtheHTTPProxyServer“。注重是在WorkBench上單擊右鍵而不是在TestPlan上,因?yàn)楝F(xiàn)在是要為記錄操作進(jìn)行配置而不是要運(yùn)行測試計劃。HTTPProxyServer的實(shí)現(xiàn)原理是通過配置瀏覽器的代理服務(wù)器而使所有的訪問請求通過JMeter發(fā)送(,因而被Jmeter把訪問過程錄制下來)。
  HTTP代理服務(wù)器(HTTPProxyServer)元件的一些參數(shù)必須被配置:
  端口(port):代理服務(wù)器的監(jiān)聽端口
  目標(biāo)控制器(TargetController):是代理用于存儲生成的數(shù)據(jù)的控制器,默認(rèn)情況下,JMeter將會在當(dāng)前的測試計劃中找一個記錄用的控制器用于存儲,此外也可以在下拉菜單中選擇任意控制起來存儲,通常默認(rèn)值可以了。
  分組(Grouping):確定在測試計劃中如何來為生成的元件分組。有多個選項(xiàng),一般可以選擇“只存儲每個組的第一個樣本”,否則,將會原樣錄制URLs,包括包含圖像和javascripts腳本的頁面。當(dāng)然也可以嘗試一下默認(rèn)值“不對樣本分組”("Donotgroupsamples"),來看一下JMeter建立的原版的測試計劃。
  包含模式(PatternstoInclude)和排除模式(PatternstoExclude):幫助過濾一些不需要的訪問請求。

軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd