線程組主要包含三個參數(shù):線程數(shù)、準(zhǔn)備時長(Ramp-Up Period(in seconds))漫仆、循環(huán)次數(shù)缕溉。
線程數(shù):虛擬用戶數(shù)死陆。一個虛擬用戶占用一個進(jìn)程或線程。設(shè)置多少虛擬用戶數(shù)在這里也就是設(shè)置多少個線程數(shù)其屏。
準(zhǔn)備時長:設(shè)置的虛擬用戶數(shù)需要多長時間全部啟動喇勋。如果線程數(shù)為20 ,準(zhǔn)備時長為10 偎行,那么需要10秒鐘啟動20個線程川背。也就是每秒鐘啟動2個線程。
循環(huán)次數(shù):每個線程發(fā)送請求的次數(shù)蛤袒。如果線程數(shù)為20 熄云,循環(huán)次數(shù)為100 ,那么每個線程發(fā)送100次請求妙真〗稍剩總請求數(shù)為20*100=2000 。如果勾選了“永遠(yuǎn)”珍德,那么所有線程會一直發(fā)送請求练般,一到選擇停止運(yùn)行腳本矗漾。
設(shè)置合理的線程數(shù)對于能否達(dá)到測試目標(biāo)有決定性的影響。在本例中薄料,要求得到網(wǎng)站首頁在20 QPS 負(fù)載情況下的響應(yīng)時間敞贡,如果如果線程數(shù)量設(shè)置的過小,則很可能無法達(dá)到設(shè)定的QPS要求都办。另外嫡锌,設(shè)置合理的循環(huán)次數(shù)也很重要,除了上面介紹的固定循環(huán)次數(shù)與永遠(yuǎn)外琳钉;也可以靈活的選擇設(shè)定測試運(yùn)行時間。勾選“調(diào)度器”蛛倦,進(jìn)行調(diào)度器配置歌懒。
添加HTTP請求
--------------------------------------------------------------------------------
添加完成線程組后,在線程組上右鍵菜單(添加--->Sampler--->HTTP請求)選擇HTTP請求溯壶。對于jmeter來說及皂,取樣器(Sampler)是與服務(wù)器進(jìn)行交互的單元。一個取樣器通常進(jìn)行三部分的工作:
向服務(wù)器發(fā)送請求
記錄服務(wù)器的響應(yīng)數(shù)據(jù)
記錄相應(yīng)時間信息
一個HTTP請求有著許多的配置參數(shù)且改,下面將詳細(xì)介紹:
名稱:本屬性用于標(biāo)識一個取樣器验烧,建議使用一個有意義的名稱。
注釋:對于測試沒有任何作用又跛,僅用戶記錄用戶可讀的注釋信息碍拆。
服務(wù)器名稱或IP:HTTP請求發(fā)送的目標(biāo)服務(wù)器名稱或IP地址。
端口號:目標(biāo)服務(wù)器的端口號慨蓝,默認(rèn)值為80 感混。
協(xié)議:向目標(biāo)服務(wù)器發(fā)送HTTP請求時的協(xié)議,可以是http或者是https 礼烈,默認(rèn)值為http 弧满。
方法:發(fā)送HTTP請求的方法,可用方法包括GET此熬、POST庭呜、HEAD、PUT犀忱、OPTIONS募谎、TRACE、DELETE等峡碉。
Content encoding:內(nèi)容的編碼方式近哟,默認(rèn)值為iso8859
路徑:目標(biāo)URL路徑(不包括服務(wù)器地址和端口)
自動重定向:如果選中該選項(xiàng),當(dāng)發(fā)送HTTP請求后得到的響應(yīng)是302/301時鲫寄,JMeter 自動重定向到新的頁面吉执。
Use keep Alive:當(dāng)該選項(xiàng)被選中時疯淫,jmeter 和目標(biāo)服務(wù)器之間使用 Keep-Alive方式進(jìn)行HTTP通信,默認(rèn)選中戳玫。
Use multipart/from-data for HTTP POST:當(dāng)發(fā)送HTTP POST 請求時熙掺,使用Use multipart/from-data方法發(fā)送,默認(rèn)不選中咕宿。
同請求一起發(fā)送參數(shù):在請求中發(fā)送URL參數(shù)币绩,對于帶參數(shù)的URL ,jmeter提供了一個簡單的對參數(shù)化的方法府阀。用戶可以將URL中所有參數(shù)設(shè)置在本表中缆镣,表中的每一行是一個參數(shù)值對(對應(yīng)RUL中的 名稱1=值1)。
同請求一起發(fā)送文件:在請求中發(fā)送文件试浙,通常董瞻,HTTP文件上傳行為可以通過這種方式模擬。
從HTML文件獲取所有有內(nèi)含的資源:當(dāng)該選項(xiàng)被選中時田巴,jmeter在發(fā)出HTTP請求并獲得響應(yīng)的HTML文件內(nèi)容后钠糊,還對該HTML進(jìn)行Parse 并獲取HTML中包含的所有資源(圖片、flash等)壹哺,默認(rèn)不選中抄伍,如果用戶只希望獲取頁面中的特定資源,可以在下方的Embedded URLs must match 文本框中填入需要下載的特定資源表達(dá)式管宵,這樣截珍,只有能匹配指定正則表達(dá)式的URL指向資源會被下載。
用作監(jiān)視器:此取樣器被當(dāng)成監(jiān)視器啄糙,在Monitor Results Listener 中可以直接看到基于該取樣器的圖形化統(tǒng)計信息笛臣。默認(rèn)為不選中。
Save response as MD5 hash隧饼?:選中該項(xiàng)沈堡,在執(zhí)行時僅記錄服務(wù)端響應(yīng)數(shù)據(jù)的MD5值,而不記錄完整的響應(yīng)數(shù)據(jù)燕雁。在需要進(jìn)行數(shù)據(jù)量非常大的測試時诞丽,建議選中該項(xiàng)以減少取樣器記錄響應(yīng)數(shù)據(jù)的開銷。
在這里我們添加兩個HTTP請求拐格,分別用于對fnng.cnblogs.com? 和 tt-topia.rhcloud.com發(fā)送請求僧免。
設(shè)置QPS限制
--------------------------------------------------------------------------------
本次性能測試的需求中提到測試的目的是“了解博客的首頁在負(fù)載達(dá)到20 QPS時的響應(yīng)時間”,因此需要控制向博客首頁發(fā)送請求的負(fù)載為20QPS捏浊。
一種可行的方法是逐步調(diào)整測試計劃中的線程計算的數(shù)量以及為取樣器(Sampler)添加定時器(Timer)懂衩,以使HTTP取樣器發(fā)出的請求的QPS保持在20個左右。但這種方法耗時耗力,需要經(jīng)過多次嘗試才能達(dá)到浊洞;另一方法牵敷,完全通過設(shè)置定時器來控制QPS,一旦取樣器的響應(yīng)時間發(fā)生改變(網(wǎng)絡(luò)環(huán)境發(fā)生改變)法希,就需要重新調(diào)整定時器的等待時間枷餐。
Jmeter提供了一個非常有用的定時器,稱為Constant Throughput Timer (常數(shù)吞吐量定時器)苫亦,該定時器可以方便地控制給定的取樣器發(fā)送請求的吞吐量毛肋。
右鍵點(diǎn)擊fnng.cnblogs.com ,彈出菜單(添加--->定時器--->Constant Throughput Timer)選擇Constant Throughput Timer
Constant Throughput Timer 的主要屬性介紹:
名稱:定時器的名稱
Target throughput(in samples per minute):目標(biāo)吞吐量屋剑。注意這里是每分鐘發(fā)送的請求數(shù)润匙,因此,對應(yīng)測試需求中所要求的20 QPS 唉匾,這里的值應(yīng)該是1200 趁桃。
Calculate Throughput based on:有5個選項(xiàng),分別是:
This thread only:控制每個線程的吞吐量肄鸽,選擇這種模式時,總的吞吐量為設(shè)置的 target Throughput 乘以矣線程的數(shù)量油啤。
All active threads:設(shè)置的target Throughput 將分配在每個活躍線程上典徘,每個活躍線程在上一次運(yùn)行結(jié)束后等待合理的時間后再次運(yùn)行∫嬉В活躍線程指同一時刻同時運(yùn)行的線程逮诲。
All active threads in current thread group:設(shè)置的target Throughput將分配在當(dāng)前線程組的每一個活躍線程上,當(dāng)測試計劃中只有一個線程組時幽告,該選項(xiàng)和All active threads選項(xiàng)的效果完全相同梅鹦。
All active threads (shared ):與All active threads 的選項(xiàng)基本相同,唯一的區(qū)別是冗锁,每個活躍線程都會在所有活躍線程上一次運(yùn)行結(jié)束后等待合理的時間后再次運(yùn)行齐唆。
All cative threads in current thread group (shared ):與All active threads in current thread group 基本相同,唯一的區(qū)別是冻河,每個活躍線程都會在所有活躍線程的上一次運(yùn)行結(jié)束后等待合理的時間后再次運(yùn)行箍邮。
如上圖,該元件僅作用于fnng.cnblogs.com 叨叙,設(shè)置定時器的Target throughput為1200/分鐘(20 QPS)锭弊,設(shè)置Calculate Throughput based on 的值為All active threads 。
當(dāng)然擂错,Constant Throughput Timer只有在線程組中的線程產(chǎn)生足夠多的request 的情況下才有意義味滞,因此,即使設(shè)置了Constant Throughput Timer的值,也可能由于線程組中的線程數(shù)量不夠剑鞍,或是定時器設(shè)置不合理等原因?qū)е驴傮w的QPS不能達(dá)到預(yù)期目標(biāo)昨凡。