JMeter定時器設置延遲與同步


JMeter定時器一般用來設置延遲與同步。它的作用域和優先級如下:

  • 定時器的優先級高於Sampler。
  • 在同一作用域(比如控制器下)有多個定時器存在,每個定時器都會執行。
  • 在某一Sampler節點下的定時器,只對這個Sampler有效。

JMeter一共有9種定時器:

image-20210608124408162

Constant Timer

image-20210608125303499

固定值,多用來模擬思考時間。

Uniform Random Timer

image-20210609085458303

隨機時間,分布會更均勻。

Random Delay Maximum:隨機延遲時間。

Constant Delay Offset:固定延遲時間。

示例:

image-20210609091204822

會讓線程延遲在2.0到2.1秒之間。

Precise Throughput Timer

image-20210609094340047

用的比較少,比Constant Throughput Timer更復雜更高級的用來控制吞吐量的一個定時器。

Constant Throughput Timer

image-20210609083734540

控制吞吐量,盡量保持Sampler產生的吞吐量(RPS)在一個固定的范圍內。

Target throughput:目標吞吐量。JMeter會根據吞吐量、並發線程數來計算迭代的時間間隔,如果吞吐量大過設定值,就增加;反之減少。

Calculate Throughput based on:

this thread only:僅針對當前線程,每個線程互不干擾,分開計算需要延遲多少時間。

all active threads:把所有線程的吞吐量合在一起作為因子計算。

all active threads in current thread group:針對當前線程組中的所有線程。

all active threads (shared):在所有線程中,隨便獲取一個線程上次運行的實際來進行計算,結果隨機不一定准確,只能努力控制吞吐量在某一個范圍。

all active threads in current thread group (shared):在上面意思一樣,范圍是當前線程組。

Gaussian Random Timer

image-20210608124752705

生成一個呈高斯分布的時間間隔,可以用來離散請求。

Deviation:一個浮動范圍的偏差值。

Constant Delay Offset:固定延遲時間。

JSR223 Timer

image-20210609093946195

跟BeanShell類似,可以運行JavaScript等其他語言。

JDK集成了JS的運行引擎,可以運行JavaScript腳本,JSR223是一個標准,為腳本引擎提供了統一的接口、統一的訪問模式。

Poisson Random Timer

image-20210609091325663

隨機時間,呈泊松分布。

Lambda:泊松分布的期望和方差。

Constant Delay Offset:固定延遲時間。

Synchronizing Timer

image-20210608125325764

同步定時器,用來模擬多用戶並發同一時刻發起請求。

Number of Simulated Users to Group by:等待x個用戶(線程)集合后開始釋放(發起請求)。

默認為0,等同於設置為線程租中的線程數量。

Timeout in milliseconds:等待時長,如果等待這么長時間,還沒有達到上個選項設置的數量,那么不再等待,立即釋放已到達的線程。

默認為0,等待線程數達到上個選項設置的數量才釋放。

BeanShell Timer

image-20210609091824998

Reset Interpreter:是否每次迭代重置解釋器,默認False。官方建議在長時間運行的腳本中才設置為True。

Parameters:入參,可以是單個變量,也可以是數組。

File Name:從腳本文件中讀取BeanShell腳本。

Script:

ctx:通過JmeterContent實例獲取運行時信息,如log.error(ctx.getThreadNum().toString());

vars:訪問或設置變量,如vars.get("name")vars.put("name", "dongfanger")

props:訪問JMeter屬性(%JMETER_HOME%/bin/jmeter.properties),如props.get("log_level.jmeter")props.put("log_level.jmeter", "ERROR")

log:在代碼中調用log類來寫日志,如log.error("loadtest");

prev:可以訪問前面Sampler的結果。

示例:

image-20210609092555389

小結

本文首先介紹了JMeter定時器的作用域和優先級,然后分別介紹了各式各樣的定時器,既能設置延遲,也能同步集合,可以固定可以隨機,配置與編程並存,五花八門。

參考資料:

《全棧性能測試修煉寶典JMeter實戰》

https://blog.csdn.net/hwhua1986/article/details/78214923


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM