在進行接口性能自動化測試過程中,壓測的方式有2種:
- 同時並發
- 設置線程組、執行時間、循環次數,這種方式可以控制接口請求的次數
- 持續壓測
- 設置線程組、循環次數=勾選“永遠”,調度器(持續時間),這種方式可以控制壓測周期時間
指定並發
- 設置線程數number of threads(users)
- 設置執行時間ramp-up period(in seconds)
- 設置循環次數loop count
場景一:
設置線程數number of threads(users):10
設置執行時間ramp-up period(in seconds):0
設置循環次數loop count:5
含義:使10個線程啟動並同時運行也就是並發執行10個線程。10個線程為一個樣本,每個樣本循環執行5次
可用監聽樹查看線程組執行的效果,是10個一起出現
場景二:
設置線程數number of threads(users):10
設置執行時間ramp-up period(in seconds):20
設置循環次數loop count:5
含義:20秒使10個線程啟動並運行,每個線程將在前一個線程啟動后20/10秒后啟動(也就是間隔2s執行一個線程。10個線程為一個樣本,每個樣本循環執行5次;使用監聽書可以看到,請求是有間隔的出現的
持續壓測
當領導說:對接口XX持續24小時的壓測?這個時候我們怎么辦呢?
希望對一個接口進行持續時間性的壓測時,就需要使用到jmeter線程組的調度器功能。
調度器可以控制壓測持續的時間和線程啟動延遲的時間。具體如下:
Loop count:forever(永遠)
Duration(seconds):持續時間
Starup delay(seconds):啟動延遲時間
場景三
設置線程數number of threads(users):10
設置執行時間ramp-up period(in seconds):0
設置循環次數loop count:勾選“永遠”
使用調度器,設置持續時間Duration(seconds):60
含義:10個線程同時並發執行。持續循環執行60s,不限制樣本數(10個線程間隔0s並發進行)
下圖為持續壓測的結果示意圖:
一、jmeter 壓測
1.一般壓測時間為10-15分鍾就行,設置時間在調度器配置--持續時間中設置,例如:想壓10分鍾,則持續時間輸入:600
1.線程數:發送請求的用戶數,即並發數
2.Ram-up Period(in seconds):此處輸入1,則指這1個線程要在1秒內全部啟動
3.循環次數:如果勾選永遠那么就一直循環。本例填寫 的是60,也就是說60乘以線程數100,一共發送6000次請求。理論上這些請求會在60秒的時候發送完成。
但是受到機器配置和 當前網絡的影響,通常這個數字要比1分鍾長一些。
https://blog.csdn.net/weixin_45580903/article/details/105196639?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_v2~rank_aggregation-9-105196639.pc_agg_rank_aggregation&utm_term=jmeter%E7%BA%BF%E7%A8%8B%E6%95%B0%E5%92%8C%E6%97%B6%E9%97%B4%E5%9B%BE&spm=1000.2123.3001.4430集合點
性能測試中最常見的一個場景莫過於同一時間N個用戶同時進行操作。之前自己學習的時候,感覺使用線程組數在0秒內啟動所有線程,不就基本實現並發了么?為啥還有個同步定時器呢?同步定時器是干啥的?看了好多篇文章和自己動手實踐后,稍微有了些理解。
同步定時器Synchronizing Timer配置如圖,主要有2個參數:
第一個參數,我自己翻譯為每次集合的用戶數,當線程組數達到這個數量時,觸發一次並發。
第二個參數,超時時間,當數量沒有達到集合用戶數時,若超過了這個時間,也會觸發並發。
幾個例子
備注:線程組下添加了一個百度搜索的HTTP請求,添加了Listener - View Results in Table,方便結果查看。
配置一:線程組數10,啟動時間為0秒,無同步定時器
效果:按下start按鈕后,所有線程組的HTTP請求幾乎同時啟動運行。
配置二:線程組數10,啟動時間為10秒,無同步定時器
效果:按下start按鈕后,每1秒啟動一個線程組,10秒完成所有10個線程組啟動,如圖:
配置三:線程組數10,啟動時間為10秒,同步定時器中每次集合用戶數10
效果:按下start按鈕后,仍然是按照配置10秒內啟動所有線程組,即每1秒啟動一個線程組,但是HTTP請求並沒有在線程組啟動后立即發送,那是因為有同步定時器設置了10個為一個集合,所以會等待10秒鍾,線程組個數湊夠了10個之后,所有線程組的HTTP請求再同時發送,如圖:
配置四:線程組數10,啟動時間為10秒,同步定時器中每次集合用戶數5
效果:按下start按鈕后,每1秒鍾啟動一個線程組,但HTTP請求並沒有立即發送,而是5秒鍾后,當集合到了5個線程組后,5個HTTP請求一起發送,再過5秒鍾后,剩余5個線程組的HTTP請求一起發送,如圖:
其他配置
配置五:線程組數10,啟動時間為10秒,同步定時器中每次集合用戶數3,超時時間為0
這種配置…運行起來的效果…:按下start按鈕,3秒后有3個線程組HTTP請求發送,6秒后有另3個線程組HTTP請求發送,9秒后又有3個線程組HTTP請求發送,然后就沒有然后了,最后一個線程組的HTTP請求不會發送了,因為永遠達不到集合數3。
配置六:線程組數10,啟動時間為10秒,同步定時器中每次集合用戶數3,超時時間為5000ms
開始時候的效果與上面配置類似,按下start按鈕,3秒后有3個線程組HTTP請求發送,6秒后有另3個線程組HTTP請求發送,9秒后又有3個線程組HTTP請求發送。此時由於只剩一個線程,所以定然不會達到集合數量,但是設置了5秒超時,所以5秒鍾后,最后一個線程組啟動運行。如圖
思考
最后的疑問是,使用
配置1(線程組數10,啟動時間為0秒,無同步定時器)
配置3(線程組數10,啟動時間為10秒,同步定時器中每次集合用戶數10)
都能實現同一時間多用戶並發。區別在哪兒呢?
1、配置3中這些線程是慢慢啟動的,然后同一個時間並發訪問。而配置1中的所有線程同時啟動且並發訪問。當並發用戶數很大很大時,配置1會使得壓力服務器瞬間壓力太大,可能會影響並發效果(最后一句話是其他同學們說的,我也沒試過,以后有機會再體驗吧)。
2、loadrunner中管這種並發叫集合點。所謂集合,感覺更像是軍訓時候,教官突然吹了一個哨子,說5分鍾后在樓下緊急集合。此時大家會各自開始准備,有的人很快就跑到樓下了,有的人穿衣服比較慢,或者跑的太慢,最后一秒鍾才到樓下,總而言之,5分鍾后大家集合完畢,准備統一行動。說着說着,是不是感覺同步計時器Synchronizing Timer才像是真正的集合呢?嘿嘿,大概是吧。
————————————————
版權聲明:本文為CSDN博主「萬能車」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_45580903/article/details/105196639