集合點:
簡單來理解一下,雖然我們的“性能測試”理解為“多用戶並發測試”,但真正的並發是不存在的,為了更真實的實現並發這感念,我們可以在需要壓力的地方設置集合點,每到輸入用戶名和密碼登錄時,所有的虛擬用戶都相互之間等一等,然后,一起訪問。
注意:
1.JMeter里面的集合點通過添加定時器來完成。
2.Synchronizing timer僅作用於同一個JVM中的線程。
集合點
1) 啟動路徑
2)用法
Number of Simulated Users to Group by:集合多少人后再執行請求(也就是執行的線程數)
注意:等同於設置為線程租中的線程數,一定要確保設置的值不大於它所在線程組包含的用戶數。
Timeout in milliseconds:指定人數 多少秒沒集合到算超時(設置延遲時間以毫秒為單位)
注意:如果設置Timeout in milliseconds為0,表示無超時時間,會一直等下去。
線程數量無法達到"Number of Simultaneous Users to Group by"中設置的值,那么Test將無限等待,除非手動終止。
3)如果希望定時器僅應用於其中一個sampler,則把該定時器作為子節點加入,如下圖
定時器僅僅對HTTP請求1起作用,即僅在HTTP請求1執行前執行定時器,和HTTP請求2無關。
3)如果你希望synchronizing timer應用於多個sampler.
如下,執行HTTP請求1和HTTP請求2前都會執行同步定時器1、2。當執行一個sampler之前時,和sampler處於相同作用域的定時器都會被執行;
注意點:
-----集合點的位置一定要在Sample(采樣器)之前才能生效嗎???”
在Jmeter中,timer是在sampler之前執行的。不管這個定時器的位置放在sampler之后,還是之前。當然,如果有多個timer的時候,在相同作用域下,會按上下順序執行timer,這個就需要慎重放置timer的順序;不過,為了更好的可讀性,還是建議將timer放在對應的sampler前面 或 子節點中;
5) 進行必要設置后,運行查看效果,通過結果樹可以看到,請求是批量執行的。
可以觀察開始執行的腳本,觀察請求的增加數量趨勢;或對比請求的發送時間.
補充: Synchronizing timer 僅作用於同一個JVM中的線程。
試想:
a.如果分布式測試時,synchronizing timer作用於所有jvm,那么jvm之間或者說監控jvm工作的部件就需要頻繁通訊,確定線程的數量及狀態等,然后集結了足夠的線程后,又要發送信號讓Jmeter來發送測試請求,中間存在延時,這樣就無法模擬更真實的高並發了,而且這個東西還會消耗測試機器的一部分性能,會給測試結果帶來負面影響;所以暫時是只支持控制單個jvm,如果后面有辦法解決上面那些問題后,就可以實現控制多個jvm,控制總並發量;
b.如果分布式測試,並使用了Synchronizing timer,且設置的值是小於單個jvm的線程數量;但是,較難確保所有jvm都在同一時間點集結了同樣數量的線程數,這樣就很難下測試結論了,因為都不知道是多少並發下的性能表現;當然了,可以將線程的啟用時間拉長,並將超時時間延長,這樣就很可能會與同一時刻集結到足夠的線程,達到超高並發的測試;所以,分布式測試與Synchronizing timer一般不是同時使用的;如果非要用,則需要慎重設置相關參數