如果你想從頭學習Jmeter,可以看看這個系列的文章哦
https://www.cnblogs.com/poloyy/category/1746599.html
Concurrency Thread Group的介紹
- Concurrency Thread Group提供了用於配置多個線程計划的簡化方法
- 該線程組目的是為了保持並發水平,意味着如果並發線程不夠,則在運行線程中啟動額外的線程
- 和Standard Thread Group不同,它不會預先創建所有線程,因此不會使用額外的內存
- 對於上篇講到的Stepping Thread Group來說,Concurrency Thread Group是個更好的選擇,因為它允許線程優雅地完成其工作
- Concurrency Thread Group提供了更好的用戶行為模擬,因為它使您可以更輕松地控制測試的時間,並創建替換線程以防線程在過程中完成
Concurrency Thread Group參數講解
- Target Concurrency:目標並發(線程數)
- Ramp Up Time:啟動時間;若設置 1 min,則目標線程在1 imn內全部啟動
- Ramp-Up Steps Count:階梯次數;若設置 6 ,則目標線程在 1min 內分六次階梯加壓(啟動線程);每次啟動的線程數 = 目標線程數 / 階梯次數 = 60 / 6 = 10
- Hold Target Rate Time:持續負載運行時間;若設置 2 ,則啟動完所有線程后,持續負載運行 2 min,然后再結束
- Time Unit:時間單位(分鍾或者秒)
- Thread Iterations Limit:線程迭代次數限制(循環次數);默認為空,理解成永遠,如果運行時間到達Ramp Up Time + Hold Target Rate Time,則停止運行線程【不建議設置該值】
- Log Threads Status into File:將線程狀態記錄到文件中(將線程啟動和線程停止事件保存為日志文件);
特別注意點
- Target Concurrency只是個期望值,實際不一定可以達到這個並發數,得看上面的配置【電腦性能、網絡、內存、CPU等因素都會影響最終並發線程數】
- Jmeter會根據Target Concurrency的值和當前處於活動狀態的線程數來判斷當前並發線程數是否達到了Target Concurrency;若沒有,則會不斷啟動線程,盡力讓並發線程數達到Target Concurrency的值
Concurrency Thread Group和Stepping Thread Group的區別
官方說法
- Stepping Thread Group不提供設置啟動延遲時間,階梯增壓過渡時間,階梯釋放過渡時間,但Concurrency Thread Group提供
- Stepping Thread Group可以階梯釋放線程,而Concurrency Thread Group是瞬時釋放(具體看下面介紹)
- Stepping Thread Group設置了需要啟動多少個線程就會嚴格執行,Concurrency Thread Group會盡力啟動線程達到Target Concurrency值
通俗點理解
- Stepping Thread Group 是手動場景:測試過程,按照設定好的步驟執行
- Concurrency Thread Group 是目標場景:達到某個目標運行場景,測試過程不可控,動態變化
類比 LR
- Stepping Thread Group :設置並發用戶數,持續時間等,每隔多少時間自動增加多少個用戶
- Concurrency Thread Group:預設一個目標並發數,每隔一段時間增加一部分並發數,直到 TPS 達到目標並發數,然后持續運行一段時間
Concurrency Thread Group + Active Threads Over Time
第一個關注點:階梯增壓過程
看Concurrency Thread Group負載預覽圖每次階梯增壓都是瞬時增壓的,但是實際測試結果可以看到它也是有一個過渡期,並不是瞬時增壓
第二個關注點:持續負載運行結束后,所有線程瞬時釋放
- 從圖最后可以看到,所有線程都是瞬時釋放的
- 普通的線程組有三種狀態:啟動、運行、釋放;而Concurrency Thread Group的線程可以理解成只有兩種狀態:啟動、運行;因為線程都在極短的時間內就結束了
Concurrency Thread Group特殊情況
上圖可以看到,活躍狀態的線程上下波動的很厲害
大致原因
受環境穩定性影響,如電腦網絡、內存、CPU;活躍線程數會有波動
如何解決
遇到這種情況可以多調試幾次,看看情況如何
結論
- 其實有波動是正常的,我們沒必要糾結
- 我們要重點注意的是TPS
- 線程組的負載只是壓力值,我們要測的是服務端的性能,需要關注的是服務端的TPS
Concurrency Thread Group的擴展
- 當Concurrency Thread Group與Throughput Shaping Timer(吞吐量計時器)一起使用時,可以用tstFeedback 函數的調用來動態維護實現目標RPS所需的線程數
- 使用此方法時, 需要將Ramp Up Time 和 Ramp-Up Steps Count 置空
- 但要確保 Hold Target Rate Time ≥ Throughput Shaping Timer 時間表中指定的總持續時間值(Duration)
(后續實際用到的時候再補充吧)