1. 程式人生 > >[搬運工系列]-JMeter(五)集合點

[搬運工系列]-JMeter(五)集合點

集合點:(高併發測試)

簡單來理解一下,雖然我們的“效能測試”理解為“多使用者併發測試”,但真正的併發是不存在的,為了更真實的實現併發這感念,我們可以在需要壓力的地方設定集合點,每到輸入使用者名稱和密碼登入時,所有的虛擬使用者都相互之間等一等,然後,一起訪問。

注意

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一般不是同時使用的;如果非要用,則需要慎重設定相關引數