- 為啥設置定時器
1.性能測試中,我們經常提到的一個概念‘並發’,其實在實際真實的性能測試中是不存在真正的並發的。為了更真實的模擬對一個請求的並發測試場景,我們通常采用設置‘集合點’達到這個效果:
模擬用戶並發時,設置集合點,為此可以加入同步定時器 Synchronizing Timer。
2.默認情況下,jmeter發送每個請求之間是沒有延時的,如果線程數足夠大,瞬間就會將服務器壓死:
多接口組成的場景用例,設置思考時間,為此可以加入其他類型的Timer (有固定的、有隨機的等)
- 基本規則:定時器在每個sampler之前去執行
一、集合點的設置
- Synchronizing Timer 同步定時器:阻塞線程,直到指定的線程數量到達后,再一起釋放,可以瞬間產生很大的壓力
參數說明:
Number of Simulated Users to Group 集合數量(要分組的模擬用戶數量),設置的值不大於它所在線程組包含的用戶數。如果設置為0,等同於設置為線程租中的線程數量。
Timeout in milliseconds 超時時間 : 如果大於0,比如5000時,等待5000(毫秒為單位)后,Timer不再等待,無論是否達到集合數量,都釋放已到達的線程。
默認為0,一直等待,Timer一直等待線程數達到了集合數量才釋放,不到達則不釋放。
超時時間 應> 請求集合數量 * 1000 / (線程數 / 線程加載時間)
首先你要弄明白同步計時器的超時時間定義:若在超時時間內,性能測試並發場景設定的並發樣本數量未達到,則jmeter認為超時,會立即執行並發。
超時時間的設定值約束:超時時間 > 請求集合數量 * 1000 / (線程數 / 線程加載時間)
分母計算結果為:每秒啟動的線程數;
請求集合數量:為設定的性能測試場景的樣本並發數量;
不等式右邊計算結果為:加載性能並發樣本所需時間(毫秒)
綜上,同步定時器的超時時間建議設置為大於不等右邊。參照:https://www.cnblogs.com/fengpingfan/p/5583594.html
注意點:
如果設置Timeout in milliseconds為0,且線程數量無法達到"Number of Simultaneous Users to Group by"中設置的值,那么Test將無限等待,除非手動終止。
Synchronizing timer 僅作用於同一個JVM中的線程,所以,如果使用並發測試,確保"Number of Simultaneous Users to Group by"中設置的值不大於它所在線程組包含的用戶數。
(原文:Synchronizing timer blocks only within one JVM, so if using Distributed testing ensure you never set "Number of Simultaneous Users to Group by" to a value superior to the number of users of its containing Thread group considering 1 injector only)
二、其他定時器,可用於設置思考時間
- Constant Timer 固定定時器:每個線程在請求之前按相同的指定時間停頓
- Gaussian Random Timer 高斯隨機定時器: 每個線程在請求前按隨機時間停頓
- Uniform Random Timer 均勻隨機定時器:會暫停每個線程請求一個隨機時長,每個時間間隔都有同樣的出現幾率
- Constant Throughput Timer 固定吞吐量定時器:可變暫停時長,通過計算來保證總吞吐量(每分鍾采樣數)盡可能接近指定的值,
- BeanShell Timer: 用來產生延遲
固定定時器的延時不會計入單個sampler的響應時間,但會計入事務控制器的時間。
對於“java請求”來說,定時器相當於loadrunner中的pacing(兩次迭代之間的間隔時間);
對於“事務控制器”來說,定時器相當於loadrunner中的think time(思考時間:實際操作中,模擬真實用戶在操作過程中的等待時間)。
通常說的響應時間,大部分情況下是針對某一個具體的sampler(http請求),而不是針對事務的響應時間(事務由一組sampler組成)。
固定吞吐量定時器可以讓JMeter以指定數字的吞吐量(即指定TPS,只是這里要求指定每分鍾的執行數,而不是每秒)執行。
吞吐量計算的范圍可以為指定為當前線程、當前線程組、所有線程組等范圍,並且計算吞吐量的依據可以是最近一次線程的執行時延。這種定時器在特定的場景下,還是很有用的。
三、定時器的作用域
定時器對其作用范圍內的每一個sampler 有效
1、定時器是在每個sampler(采樣器)之前執行的,而不是之后(無論定時器位置在sampler之前還是下面);
2、當執行一個sampler之前時,所有當前作用域內的定時器都會被執行;
3、如果希望定時器僅應用於其中一個sampler,則把定時器作為子節點加入;
4、如果希望在sampler執行完之后再等待,則可以使用Test Action;
參照:https://www.cnblogs.com/wxinyu/p/7687063.html 九種定時器的介紹
參照:https://www.jianshu.com/p/32a44efd8395
參照:http://www.mamicode.com/info-detail-2230433.html
參照:http://makaidong.com/licl11092/11682_689956.html
在添加元件后,可以按照這個順序調整元件的位置:配置元件(cookie \header管理器等)--》前置處理器--》定時器--》取樣器--》后置處理器--》斷言--》監聽器
===============================
實例 https://yq.aliyun.com/articles/708146?spm=a2c4e.11155472.0.0.4ad91c70YfClbo
簡單壓測---到場景編排---壓測執行