小程序官方開發(fā)文檔沈陽企業(yè)網(wǎng)站seo公司
簡(jiǎn)介
JMeter中的定時(shí)器(Timer)是一種重要的元件,用于模擬用戶在不同時(shí)間間隔內(nèi)發(fā)送請(qǐng)求的場(chǎng)景。通過使用定時(shí)器,可以模擬負(fù)載、并發(fā)和容量等不同情況下的請(qǐng)求發(fā)送頻率。
使用定時(shí)器
- 可以在取樣器下添加定時(shí)器,這樣定時(shí)器只會(huì)作用于當(dāng)前取樣器
- 也可以在線程組下添加多個(gè)定時(shí)器,統(tǒng)計(jì)定時(shí)器的總和,然后作用于線程組下的所有取樣器
定時(shí)器的作用域
- 定時(shí)器是在每個(gè)sampler(采樣器)之前執(zhí)行的,而不是之后(無論定時(shí)器位置在sampler之前還是下面);
- 當(dāng)執(zhí)行一個(gè)sampler之前時(shí),所有當(dāng)前作用域內(nèi)的定時(shí)器都會(huì)被執(zhí)行;
- 如果希望定時(shí)器僅應(yīng)用于其中一個(gè)sampler,則把定時(shí)器作為子節(jié)點(diǎn)加入;
定時(shí)器介紹
1、固定定時(shí)器
1、如果你需要讓每個(gè)線程在請(qǐng)求之前按相同的指定時(shí)間停頓,那么可以使用這個(gè)定時(shí)器;需要注意的是,固定定時(shí)器的延時(shí)不會(huì)計(jì)入單個(gè)sampler的響應(yīng)時(shí)間,但會(huì)計(jì)入事務(wù)控制器的時(shí)間。
2、固定定時(shí)器放到線程組下其作用域是所有請(qǐng)求都會(huì)延遲固定器設(shè)置的時(shí)間,如果放到請(qǐng)求內(nèi),作用域是單個(gè)請(qǐng)求延遲時(shí)間(常用)。
3、對(duì)于“java請(qǐng)求”這個(gè)sampler來說,定時(shí)器相當(dāng)于loadrunner中的pacing(兩次迭代之間的間隔時(shí)間);
4、對(duì)于“事務(wù)控制器”來說,定時(shí)器相當(dāng)于loadrunner中的think time(思考時(shí)間:實(shí)際操作中,模擬真實(shí)用戶在操作過程中的等待時(shí)間)。
2、統(tǒng)一隨機(jī)定時(shí)器
它產(chǎn)生的延遲時(shí)間是個(gè)隨機(jī)值,而各隨機(jī)值出現(xiàn)的概率均等??偟难舆t時(shí)間等于一個(gè)隨機(jī)延遲時(shí)間加上一個(gè)固定延遲時(shí)間,用戶可以設(shè)置隨機(jī)延遲時(shí)間和固定延遲時(shí)間。
總延遲時(shí)間=指定范圍內(nèi)的隨機(jī)時(shí)間 + 固定延遲時(shí)間。
andom Delay Maximum(in milliseconds):隨機(jī)延遲最大的時(shí)間 單位毫秒,比如我這里設(shè)置為1000ms
Constant Delay Offset(in milliseconds):固定延遲時(shí)間 單位毫秒,我這里設(shè)置為2000ms
那么總的延遲時(shí)間范圍是2000毫秒~3000毫秒之間的值。
3、精準(zhǔn)吞吐量定時(shí)器(Precise Throughput Timer)
用來控制吞吐量的定時(shí)器。和 Constant Throughput Timer 類似,但是能更精準(zhǔn)的控制請(qǐng)求。區(qū)別就是 Constant Throughput Timer 根據(jù)時(shí)間來做定時(shí)器(到了多少秒就發(fā)請(qǐng)求);Precise Throughput Timer 是根據(jù)吞吐量在做計(jì)時(shí)器(到了多少量就發(fā)請(qǐng)求)。也就是能做到控制請(qǐng)求的速度和個(gè)數(shù)。
參數(shù)介紹
線程以確保目標(biāo)吞吐量(Delay threads to ensure target throughput)
- 目標(biāo)吞吐量(每個(gè)“吞吐期”的樣本)(Target throughput (in samples per “throughput period”)):期望測(cè)試的TPS,可以精確到多位小數(shù)(不過最終報(bào)告只會(huì)有1位小數(shù))
- 吞吐量周期(秒)(Throughput period (seconds)):在多少秒內(nèi)執(zhí)行測(cè)試的TPS(因?yàn)門PS單位是秒,這里固定使用1秒即可)
- 測(cè)試持續(xù)時(shí)間(秒)(Test duration (seconds)):測(cè)試時(shí)長(zhǎng),與前面線程組的數(shù)值保持一致即可
批處理離開
- 批處理中的線程數(shù)(線程)(Number of threads in the batch (threads)):是指準(zhǔn)備好了多少個(gè)線程后一起發(fā)起請(qǐng)求(即集合點(diǎn)),取與TPS保持一致的數(shù)值(如果TPS是小數(shù),則這里向上取整)
- 批處理中的線程之間的延遲(ms)(Delay between threads in the batch (ms)):第一批與第二批處理之間的延遲時(shí)間;默認(rèn)即可
設(shè)置以確??芍貜?fù)的順序
- 隨機(jī)種子(從0變?yōu)殡S機(jī))(Random seed (change from 0 to random)):非0隨機(jī)種子可以重復(fù);0不可重復(fù),默認(rèn)即可
4、固定吞吐量定時(shí)器(Constant Throughput Timer)
可以讓JMeter以指定數(shù)字的吞吐量(即指定TPS)執(zhí)行,注意的是這里要求指定每分鐘的執(zhí)行數(shù),而不是每秒。在控制對(duì)服務(wù)器施壓非常實(shí)用,如已知服務(wù)器每分鐘最大能處理多少線程數(shù)的情況下,要對(duì)服務(wù)器進(jìn)行長(zhǎng)時(shí)的疲勞強(qiáng)度測(cè)試。
Calculate Throughput based on 有5個(gè)選項(xiàng),分別是:
-
this thread only:控制每個(gè)線程的吞吐量,選擇這種模式時(shí),總的吞吐量 = Target throughput * 線程的數(shù)量 。
-
all active threads:設(shè)置的Target throughput將分配在每個(gè)活躍線程上,每個(gè)活躍線程在上一次運(yùn)行結(jié)束后等待合理的時(shí)間后再次運(yùn)行?;钴S線程指同一時(shí)刻同時(shí)運(yùn)行的線程。
-
all active threads in current thread group:設(shè)置的Target throughput將分配在當(dāng)前線程組的每一個(gè)活躍線程上,當(dāng)測(cè)試計(jì)劃中只有一個(gè)線程組時(shí),該選項(xiàng)和all active threads選項(xiàng)的效果完全相同。
-
all active threads (shared ):與All active threads 的選項(xiàng)基本相同,唯一的區(qū)別是,每個(gè)活躍線程都會(huì)在所有活躍線程上一次運(yùn)行結(jié)束后等待合理的時(shí)間后再次運(yùn)行。
-
all cative threads in current thread group (shared ):與All active threads in current thread group 基本相同,唯一的區(qū)別是,每個(gè)活躍線程都會(huì)在所有活躍線程的上一次運(yùn)行結(jié)束后等待合理的時(shí)間后再次運(yùn)行。
5、JSR223定時(shí)器(JSR223 Timer)
JSR定時(shí)器,在jemter最新的版本中,新增了這個(gè)定時(shí)器,可以這么理解,這個(gè)定時(shí)器相當(dāng)于BeanShell定時(shí)器的“父集”,它可以使用java、JavaScript、beanshell等多種語言去實(shí)現(xiàn)你希望完成的事情。
參數(shù)說明
- Language(腳本語言): 選擇腳本語言;
- Parameters(參數(shù):String/String[] 類型參數(shù)): 傳遞給腳本的參數(shù);
- Script file: 腳本文件路徑,腳本執(zhí)行后返回值為定時(shí)器的延遲時(shí)間(單位為毫秒);
- Script compilation caching(如果可用,緩存編譯腳本): 如果使用的語言支持可編譯接口(Groovy是其中之一,Java、BeanShell和javascript不是),JMeter將使用跨測(cè)試計(jì)劃的唯一字符串來緩存腳本編譯的結(jié)果。
- Script: 手動(dòng)編寫腳本。
使用
6、同步定時(shí)器(Synchronizing Timer)
同步計(jì)時(shí)器,用來模擬多用戶并發(fā),或者說更嚴(yán)格的并發(fā)場(chǎng)景。
用來設(shè)置集合點(diǎn),阻塞線程,同步虛擬用戶,直到指定的線程數(shù)量到達(dá)后,恰好在同一時(shí)刻執(zhí)行任務(wù),再一起釋放,可以瞬間產(chǎn)生很大的壓力。
注意:一般情況,并發(fā)用戶數(shù)多少,同步定時(shí)器就寫多少。(多少并發(fā)就要等多少個(gè)人到齊一起釋放
參數(shù)說明
Number of Simulated Users to Group by(模擬用戶組數(shù)量):
集合點(diǎn)個(gè)數(shù) (執(zhí)行的線程數(shù)),如果設(shè)置為0,等于設(shè)置為線程租中的線程數(shù)量。 Timeout in milliseconds(超時(shí)時(shí)間):
指定線程數(shù)多少秒沒集合到算超時(shí)(以毫秒為單位),默認(rèn)為0。
如果設(shè)置為0,該定時(shí)器將會(huì)等待線程數(shù)達(dá)到了 "模擬用戶組數(shù)量" 中設(shè)置的值才釋放,不夠的話就死等。
如果大于0,那么如果超過 "超時(shí)時(shí)間" 中設(shè)置的最大等待時(shí)間后還沒達(dá)到 "模擬用戶組數(shù)量" 中設(shè)置的值,Timer 將不再等待,釋放已到達(dá)的線程。(1)上面兩個(gè)參數(shù)如果都設(shè)置了值,則在實(shí)際中是哪個(gè)條件先達(dá)到,定時(shí)器先執(zhí)行哪個(gè),如第一個(gè)參數(shù)釋放線程數(shù)量先達(dá)到,則不會(huì)管超時(shí)時(shí)間的值,timer 會(huì)釋放;如果第二個(gè)參數(shù)超時(shí)時(shí)間先達(dá)到,則不會(huì)再等線程數(shù)量,按照目前超時(shí)的時(shí)間點(diǎn)集合的線程數(shù),timer 釋放。
(2)同步定時(shí)器(Synchronizing Timer)的超時(shí)時(shí)間設(shè)置要求: 超時(shí)時(shí)間 > 請(qǐng)求集合數(shù)量 * 1000 / (線程數(shù) / 線程加載時(shí)間)。
7、泊松隨機(jī)定時(shí)器(Poisson Random Timer)
這個(gè)定時(shí)器在每個(gè)線程請(qǐng)求之前按隨機(jī)的時(shí)間停頓,大部分的時(shí)間間隔出現(xiàn)在一個(gè)特定的值,總的延遲就是泊松分布值和偏移值之和。
上面表示暫停時(shí)間會(huì)分布在 100到400毫秒之間:
(1)Lambda(in milliseconds):蘭布達(dá)值(以毫秒為單位);
(2)Constant Delay Offset(in milliseconds):固定延遲偏移(以毫秒為單位),暫停的毫秒數(shù)減去隨機(jī)延遲的毫秒數(shù)。
8、高斯隨機(jī)定時(shí)器(Gaussian Random Timer)
高斯定時(shí)器,生成一個(gè)呈高斯分布的時(shí)間間隔。
如需要每個(gè)線程的延遲時(shí)間是符合標(biāo)準(zhǔn)正態(tài)分布的隨機(jī)時(shí)間停頓,那么使用這個(gè)定時(shí)器,總延遲 = 高斯分布值(平均0.0和標(biāo)準(zhǔn)偏差1.0)* 指定的偏差值+固定延遲偏移(計(jì)算參考:Math.abs((this.random.nextGaussian() * 偏差值) + 固定延遲偏移))。
總延遲時(shí)間 = 高斯分布值(平均0.0和標(biāo)準(zhǔn)差1.0)* 指定的偏差值 + 固定延遲偏移。
參數(shù)說明
- Deviation(偏差):偏差值,是一個(gè)浮動(dòng)范圍;
- Constant Delay Offset(固定延遲偏移):固定延遲時(shí)間。
9、BeanShell定時(shí)器(BeanShell Timer)
Bean Shell定時(shí)器,顧名思義是:互相交替,其節(jié)點(diǎn)下的取樣器交替執(zhí)行。根據(jù)被控制器觸發(fā)執(zhí)行次數(shù),去依次執(zhí)行控制器下的子節(jié)點(diǎn)<邏輯控制器、采樣器>。被觸發(fā)執(zhí)行可以由線程組的線程數(shù)、循環(huán)次數(shù)、邏輯控制器觸發(fā)。
參數(shù)說明
Reset Interpreter(重置解釋器):
每次迭代是否重置解析器,默認(rèn)為 false;在長(zhǎng)時(shí)間運(yùn)行的腳本中建議設(shè)置為 true。 Parameters(參數(shù):String 或者 String[] ):
BeanShell 腳本的入?yún)ⅰH雲(yún)⒖梢允菃蝹€(gè)變量(字符串);也可以是(字符串)數(shù)組,若是字符串?dāng)?shù)組,兩個(gè)元素之間用空格隔開;也可以是常量。 File Name(文件名):
BeanShell 腳本可以從腳本文件中讀取。 Script(腳本):
在 Script 區(qū)直接寫 BeanShell 腳本。
演示
參考文章