- 翻譯來自Timers
18.6 Timers
JMeter3.1版有一個新特性驮俗,新增了乘法因子一項懂缕,可以通過設置屬性timer.factor=float number(其中float number是十進制正數(shù))將乘法因子應用于隨機定時器。
JMeter將把這個因子乘以計算出的睡眠延遲此功能可用于:
- 高斯隨機定時器
- 泊松隨機定時器
-
均勻隨機定時器
定時器與采樣器在同一范圍內(nèi)王凑,無論定時器是單個還是多個搪柑,定時器都將在每個采樣器之前處理;定時器與采樣器不在同一范圍內(nèi)索烹,將不被處理工碾。
如果要將定時器應用于單個采樣器,可以將定時器添加為采樣器的子元素百姓;如果想在采樣器之后應用定時器倚喂,需要將定時器添加到下一個采樣器,或?qū)⑵涮砑拥?a target="_blank">Flow Control Action采樣器的子項瓣戚。
Constant Timer(常量定時器)
使用常量定時器時端圈,每個線程在請求之間暫停相同的時間。
- Parameters
Attribute | Description | Required |
---|---|---|
Name | 定時器名稱 | NO |
Thread Delay | 暫停的毫秒數(shù) | YES |
Gaussian Random Timer(高斯隨機定時器)
高斯隨機定時器使得每個線程請求暫停一段隨機時間(隨機延遲時間)子库,隨機延遲時間總體分布在特定值附近舱权。總的延遲時間是高斯分布值(平均值為0.0仑嗅,標準偏差為1.0)乘以指定的偏差值(Deviation)加上偏移量(Offset Value)宴倍。另一種解釋方法是,在高斯隨機定時器中仓技,恒定偏移量的變化具有高斯曲線分布鸵贬。
- Parameters
Attribute | Description | Required |
---|---|---|
Name | 定時器名稱 | NO |
Deviation | 偏差值(毫秒) | YES |
Constant Delay Offset | 除了隨機延遲之外還需要暫停的毫秒數(shù)(原文查看Number of milliseconds to pause in addition to the random delay.) | YES |
Uniform Random Timer(均勻隨機定時器)
均勻隨機定時器使得每個線程請求暫停一段隨機時間),每個時間間隔具有相同的發(fā)生概率脖捻,總延遲是隨機值和偏差值的總和阔逼。
- Parameters
Attribute | Description | Required |
---|---|---|
Name | 定時器名稱 | NO |
Random Delay Maximum | 最大的隨機暫停時間(單位是毫秒) | YES |
Constant Delay Offset | 除了隨機延遲之外還需要暫停的毫秒數(shù) | YES |
Constant Throughput Timer(恒定吞吐量定時器)
恒定吞吐量定時器引入可變的暫停時間,使得總吞吐量(以每分鐘的采樣數(shù)計算)盡可能接近給定的數(shù)字地沮,如果服務器無法處理它嗜浮,或者其他計時器或耗時的測試元素阻止它,那么吞吐量將降低摩疑。
注意:雖然計時器被稱為恒定吞吐量定時器危融,但實際應用中,吞吐量可以根據(jù)變量或函數(shù)調(diào)用定義雷袋,并且可以在測試期間更改該值吉殃,該值可以通過多種方式更改:
- 使用計數(shù)器變量
- 使用一個__jexl3,__groovy 函數(shù)提供一個變化的值
- 使用遠程BeanShell服務更改JMeter屬性
有關詳細信息,請參見 Best Practices蛋勺。
請注意速侈,在測試過程中不應該經(jīng)常更改吞吐量值,新值需要一段時間才能生效迫卢。
- Parameters
Attribute | Description | Required |
---|---|---|
Name | 定時器名稱 | NO |
Target Throughput | 目標吞吐量 | YES |
Calculate Throughput based on | 見附1 | YES |
附1
- 當前線程-每個線程將嘗試保持目標吞吐量倚搬。總吞吐量將與活動線程數(shù)成比例乾蛤。
- 當前線程組中的所有活躍線程-目標吞吐量除以當前線程組中的所有活躍線程每界。每個線程將根據(jù)它上次運行的時間而決定延遲時間。
- 所有活躍線程-目標吞吐量在所有線程組中的所有活躍線程之間分配家卖。每個線程都會根據(jù)它上次運行的時間而決定延遲時間眨层。在這種情況下,每個線程組都需要一個具有相同設置的恒定吞吐量計時器上荡。
- 當前線程組中的所有活躍線程(共享)-如上所述趴樱,但每個線程都會根據(jù)組中的任何線程上次運行的時間而延遲。
- 所有活躍線程(共享)-如上所述酪捡;每個線程都會根據(jù)上次運行任何線程的時間延遲叁征。
共享和非共享模式都是為了產(chǎn)生期望的吞吐量,不過共享算法強調(diào)總體上更準確的目標吞吐量逛薇,非共享模式強調(diào)在線程之間目標吞吐量的均勻分布捺疼。(該部分不確定,詳細查看The shared and non-shared algorithms both aim to generate the desired throughput, and will produce similar results.The shared algorithm should generate a more accurate overall transaction rate.The non-shared algorithm should generate a more even spread of transactions across threads.)
Precise Throughput Timer(精確吞吐量定時器)
精確吞吐量定時器引入可變的暫停時間永罚,使得總吞吐量(例如啤呼,以每分鐘的樣本數(shù)為單位)盡可能接近給定值。當然呢袱,如果服務器不能處理它官扣,或者如果存在其他計時器,或者如果沒有足夠的線程羞福,或者耗時的測試元素阻止它惕蹄,那么吞吐量將降低。
雖然該定時器被稱為精確吞吐量定時器坯临,但其目的并不是在測試期間每隔1秒產(chǎn)生相同數(shù)量的樣本焊唬。
定時器最適合36000個請求/小時以下的QPS,測試時間過長這個值會有所波動(如果您的目標相差很大看靠,請參閱下面的監(jiān)控部分)。
精確吞吐量控制器在測試計劃中的最佳位置
計時器由所有同級元素及其子元素繼承液肌。所以精確吞吐量計時器最好放在測試循環(huán)的第一個元素之下挟炬。例如,您可以在開始處添加一個虛擬采樣器,并將計時器放在該虛擬采樣器下谤祖。
精確吞吐量定時器實現(xiàn)原理
精確吞吐量定時器的實現(xiàn)是基于泊松過程婿滓,但泊松過程可能會出現(xiàn)以下的問題。真正的泊松過程的抵達率λ會比較大(λ表示單位時間內(nèi)事件的平均發(fā)生次數(shù))粥喜,這會導致凸主,比如λ=1,則可能會在60秒長的測試中得到50個樣本额湘。恒定吞吐量計時器會將λ收斂到指定的速率卿吐,但它更傾向于以偶數(shù)間隔生成樣本。
爬坡和啟動峰值問題
我們可以使用“加速”或類似的方法來避免測試開始時出現(xiàn)的峰值锋华。例如嗡官,如果將線程組配置為有100個線程,并將Ramp-up Period(爬坡周期)設置為0(或者一個很小的數(shù))毯焕,所有線程將同時啟動衍腥,則會產(chǎn)生一個負載的峰值。除此之外纳猫,如果設置的Ramp-up Period(爬坡周期)太高婆咸,則可能無法達到所需的負載。
精確的吞吐量計時器以隨機方式執(zhí)行所有線程芜辕,因此它可以用于生成恒定負載擅耽,并且爬坡周期和延遲最好設置為0。
多個線程組同時開始
當測試計劃包含多個線程組時物遇,也可能會出現(xiàn)爬坡問題乖仇。為了緩解這個問題,通常會向每個線程組添加隨機延遲询兴,以便線程在不同的時間啟動乃沙。
精確的吞吐量計時器可以避免這個問題,因為它以隨機方式調(diào)度執(zhí)行線程組诗舰,而不需要手動添加額外的隨機延遲來緩解啟動峰值警儒。
每小時的迭代次數(shù)
例如,我們需要完成每小時60次迭代眶根,則需要進行如下配置(其他參數(shù)可以保留其默認值)
- Target throughput-目標吞吐量(樣本數(shù)):60
- Throughput period(seconds)-吞吐量周期(秒):3600
-
Test duration(seconds)-測試持續(xù)時間(秒):3600
前兩個選項設置吞吐量蜀铲。即60/3600、30/1800和120/7200代表完全相同的負載級別属百,實際需要根據(jù)業(yè)務需求設置負載級別记劝。例如,如果要求測試“每小時60個樣本”族扰,則設置60/3600厌丑。如果要求測試“每分鐘1個樣本”定欧,則設置1/60。
Test duration是為了確保在測試持續(xù)時間內(nèi)定時器能夠給出一個準確的樣本數(shù)怒竿。精確吞吐量定時器在測試計劃開始時就制定了自己的測試調(diào)度砍鸠。例如,如果您希望以每小時60的吞吐量執(zhí)行5分鐘的測試耕驰,您可以將測試持續(xù)時間(秒)設置為300爷辱。注意:Test duration是針對定時器而言,并不影響測試計劃的完整測試時間朦肘。
線程數(shù)和思考時間
測試低速率和可重復測試
測試高頻率和長時間測試
脈沖負荷
可變負載率
監(jiān)控
- Parameters
Attribute | Description | Required |
---|---|---|
Name | 定時器名稱 | NO |
Target throughput (in samples per 'throughput period')-目標吞吐量 | 定時器名稱 | YES |
Throughput period (seconds)-吞吐量周期 | 定時器名稱 | YES |
Test duration (seconds)-測試持續(xù)時間 | 定時器名稱 | YES |
Number of threads in the batch (threads)-每次迭代的線程數(shù) | 定時器名稱 | YES |
Delay between threads in the batch (ms)-每次迭代線程間的延遲 | 定時器名稱 | YES |
Use approximate throughput when sequence length exceeds (samples)-當序列長度超過(樣本)時使用近似吞吐量 | 定時器名稱 | YES |
Allowed throughput surplus (percents)-允許吞吐量盈余(百分比) | 定時器名稱 | YES |
Random seed (change from 0 to random)-隨機數(shù)(從0開始) | 定時器名稱 | YES |