12.1 集合點的定義
在性能測試過程中,為了真實模擬多個用戶同時進行操作以度量服務(wù)器的處理能力削锰,可以考慮同步虛擬用戶以便恰好在同一時刻執(zhí)行操作或發(fā)送請求瞻惋。
通過插入集合點可以較真實模擬多個用戶并發(fā)操作官辈。
(注意:雖然通過加入集合點可以約束請求同時發(fā)送,但不能確保請求同時到達服務(wù)器贮折,所以只能說是較真實模擬并發(fā))
在JMeter中可以通過 同步定時器
來設(shè)置集合點裤翩。
12.2 同步定時器
Synchronizing Timer的目的是阻塞線程,直到N個線程被阻塞调榄,然后它們?nèi)勘会尫庞辉R虼耍琒ynchronizing Timer可以在測試計劃的各個點創(chuàng)建大的即時負載每庆。
配置項
Number of Simultaneous Users to Group by:
設(shè)置一次性釋放的線程數(shù)(默認為0)筐带。通俗的理解就是并發(fā)用戶數(shù)。
若設(shè)置為0缤灵,表示一次性釋放的線程組下所有的線程伦籍。
也就是并發(fā)用戶數(shù)等于線程組下設(shè)置的線程數(shù)蓝晒。
Timeout in milliseconds:
設(shè)置超時時間(單位毫秒ms,默認為0)帖鸦。
若設(shè)置為0芝薇,定時器需要無條件等待設(shè)置線程數(shù)個數(shù)的線程全部到達才釋放。
比如設(shè)置線程數(shù)為100作儿,則定時器無條件等待直到有100個線程達到才釋放洛二。
若設(shè)置的值大于0,則定時器以設(shè)置的超時時間作為等待釋放的條件立倍。
若相鄰兩個線程到達同步定時器的時間間隔大于超時時間灭红,
即使設(shè)置的線程數(shù)的線程未全部到達,定時器也會停止等待而釋放到達的線程口注。
比如設(shè)置線程數(shù)為100变擒,超時時間為2000ms,
工作原理為:從定時器工作開始計時寝志,時間從0開始娇斑,在超時時間內(nèi)第1個線程達到,則計時器重置為0材部;
等待第2個線程毫缆,在超時時間內(nèi)第2個線程到達,計時器重置為0乐导;等待第3個線程苦丁,...
只要相鄰兩個線程組之間的等待時間間隔沒有超過2000ms的超時時間,則會等待全部100個線程達到才釋放物臂。
否則會停止等待立即釋放旺拉,比如,在等待第24個線程到達定時器時棵磷,
計時器時間超過2000ms了蛾狗,則定時器停止等待,立即釋放到達的23個線程仪媒。
注意事項
在使用同步定時器時沉桌,請注意如下事項:
1.超時時間設(shè)置合理性
Timeout > 1000*(Number of Simulated Users to Group by)*(Ramp-Up Period)/(Number of Threads)
其中,Timeout為超時時間(單位ms)算吩,
Number of Simulated Users to Group by為一次性釋放線程數(shù)(并發(fā)數(shù))
Ramp-Up Period為線程組下所有線程的加載時間
Number of Threads為線程組下所有線程數(shù)
比如在線程組中設(shè)置10秒內(nèi)要加載完200個線程留凭,并在同步定時器中設(shè)置并發(fā)數(shù)為100,則超時時間設(shè)置須滿足如下條件:
Timeout > 1000*100*10/200 ms = 5000 ms
2.同步定時器僅對同一JVM中的線程有效赌莺,因此在分布式測試中不要使用冰抢,因為
當JMeter分布式部署執(zhí)行性能測試時,測試計劃分發(fā)到不同的Slave上執(zhí)行艘狭,
為了確定是否滿足線程釋放條件挎扰,各臺Slave上的JVM需要相互通信才能確定翠订,
實現(xiàn)困難且即使實現(xiàn)了也難免存在延時,這樣就不能保證真實的并發(fā)遵倦。
所以目前JMeter的做法是僅支持單個JVM尽超。
12.3 應(yīng)用案例
這里以ECshop前臺系統(tǒng)登錄并發(fā)為例。
- 假設(shè)默認50個用戶并發(fā)登錄梧躺。
- 添加同步定時器似谁,將釋放線程數(shù)設(shè)置為50,超時時間設(shè)置為1000ms掠哥。
如下圖所示:
image