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 > 1000100*10/200 ms = 5000 ms
2.同步定時器僅對同一JVM中的線程有效,因此在分布式測試中不要使用钉稍,因為
當(dāng)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狠怨。
如下圖所示: