模擬並發。
設置一個閾值(請求數量),當請求數達到這個閾值時,允許請求同時發出。例如:想測試一座橋的並發(忽略載重等其他因素,只考慮通過),那么並發的請求就是類似於多少輛車可同時通過橋,而車輛一般情況下是不可能同時通過橋的,因而我們可以在橋頭A,設置一個集合點,等車輛數滿足一定的數量,同時讓車輛通過此橋。
步驟:
1. 添加同步定時器
Add --> Timer --> Synchronizing Timer
2. 配置同步定時器
a)Number of Simulated Users to Group by:請求集合數量(模擬用戶的數量,即指定同時釋放的線程數數量)
b)Timeout in milliseconds:超時時間(超時多少毫秒后同時釋放指定的線程)
當線程數=集合數量時,集合好了就全部釋放,不用等超時時間
當線程數<集合數量時,設置10000毫秒(即10s),意思是從點擊start開始,等待10s后同時釋放,釋放數量n(線程數)個
當線程數>集合數量時,集合好了就釋放n(集合數量)個,然后再過10s釋放m(線程數-集合數)個,也就是剩余的
PS:超時時間設置場景:實際運行過程中,可能出現請求數當不滿足集合點設置的請求數時(未設置超時時間),JMeter一直卡頓在如下頁面:
解決方案是設置同步定時器的超時時間:
超時時間 > 請求集合數量 * 1000 / (線程數 / 線程啟動加載時間)
下面以三個sampler為例:
場景一:設置定時器與不設置定時器區別
線程數設置為10,集合點為10,超時為1000,點擊運行
關閉定時器,發送前期都是零零散散的
場景二:定時器位置是否影響結果
定時器移動到sampler1,結果與3.1一樣,如下圖所示,所以,不管移動到什么位置,發現只要在該線程組下,都是作用於該線程組下所有請求線程
場景三:移動到子節點下面是什么情況呢,從下面的數據發現是作用於該父類節點的sampler
定時器僅僅對sampler1起作用,即僅在sampler1執行前執行定時器,和sampler2及sampler3無關
注意點:集合點的位置一定要在Sample(采樣器)之前才能生效嗎???”
在Jmeter中,timer是在sampler之前執行的。不管這個定時器的位置放在sampler之后,還是之前。當然,如果有多個timer的時候,在相同作用域下,會按上下順序執行timer,這個就需要慎重放置timer的順序;不過,為了更好的可讀性,還是建議將timer放在對應的sampler前面 或 子節點中