JMeter定時器設定延遲與同步

自動化程式碼美學發表於2021-06-11

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

相關文章