Jmeter(十四) – 從入門到精通 – JMeter定時器 – 下篇(詳解教程)
1.簡介
用戶實際操作時,並非是連續點擊,而是存在很多停頓的情況,例如:用戶需要時間閱讀文字內容、填表、或者查找正確的鏈接等。為了模擬用戶實際情況,在性能測試中我們需要考慮思考時間。若不認真考慮思考時間很可能會導致測試結果的失真。例如,估計的可支撐用戶數偏小。在性能測試中,訪問請求之間的停頓時間被稱之為思考時間,那麼如何模擬這種停頓呢?我們可以藉助JMeter的定時器實現。
JMeter中的定時器一般被我們用來設置延遲與同步。定時器的執行優先順序高於Sampler(取樣器),在同一作用域(例如控制器下)下有多個定時器存在時,每一個定時器都會執行,如果想讓某一定時器僅對某一Sampler有效,則可以把定時器加在此Sampler節點下。
2.預覽定時器
首先我們來看一下JMeter的定時器,路徑:執行緒組(用戶)->添加->定時器(Timer);我們可以清楚地看到JMeter5中共有9個定時器,如下圖所示:
如果上圖您看得不是很清楚的話,宏哥總結了一個思維導圖,關於JMeter5的邏輯控制器類型,如下圖所示:
通過以上的了解,我們對定時器有了一個大致的了解和認識。下面宏哥就給小夥伴或則童鞋們分享講解一些通常在工作中會用到的定時器。
3.常用定時器詳解
這一小節,宏哥就由上而下地詳細地講解一下常用的定時器。
3.1Gaussian Random Timer
高斯定時器,高斯定時器,生成一個呈高斯分布的時間間隔。
如需要每個執行緒的延遲時間是符合標準正態分布的隨機時間停頓,那麼使用這個定時器,總延遲 = 高斯分布值(平均0.0和標準偏差1.0)* 指定的偏差值+固定延遲偏移(計算參考:Math.abs((this.random.nextGaussian() * 偏差值) + 固定延遲偏移))。
另一種解釋方法,在高斯隨機定時器中, 隨機時間在固定延遲偏移附近,概率符合高斯曲線分布。
總延遲時間 = 高斯分布值(平均0.0和標準差1.0)* 指定的偏差值 + 固定延遲偏移
1、我們先來看看這個Gaussian Random Timer長得是啥樣子,路徑:執行緒組 > 添加 > 定時器 > 高斯隨機定時器,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Deviation:忽略子控制器,即子控制器失效,由交替控制器接管。
Constant Delay Offset:
3.1.1實例
1、新建測試計劃,執行緒組下添加2個取樣器 訪問部落格園首頁、訪問北京宏哥的園子,如下圖所示:
2、然後再添加高斯隨機定時器,設置高斯隨機定時器的偏差為1000ms,固定延遲偏移為3000,如下圖所示:
3、配置好以後,點擊「保存」,運行JMeter,查看錶格結果(取樣器訪問部落格園首頁和訪問度娘間隔3s),如下圖所示:
3.2JSR223 Timer
JSR定時器,在jemter最新的版本中,新增了這個定時器,可以這麼理解,這個定時器相當於BeanShell定時器的「父集」,它可以使用java、JavaScript、beanshell等多種語言去實現你希望完成的事情。
1、我們先來看看這個JSR223 Timer長得是啥樣子,路徑:執行緒組 > 添加 > 定時器 > JSR233定時器,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Thread Delay:忽略子控制器,即子控制器失效,由交替控制器接管。
3.2.1實例
1、新建測試計劃,執行緒組下添加2個取樣器 訪問部落格園首頁、訪問度娘,如下圖所示:
2、然後再添加JSR223 定時器,編寫腳本設置延遲時間5s,如下圖所示:
3、配置好以後,點擊「保存」,運行JMeter,查看錶格結果(取樣器訪問部落格園首頁和訪問度娘間隔5s),如下圖所示:
3.3Poisson Random Timer
泊松隨機定時器,這個定時器在每個執行緒請求之前按隨機的時間停頓,總的延遲就是泊松分布值和偏移值之和。這個定時器在每個執行緒請求之前按隨機的時間停頓,總的延遲就是泊松分布值和偏移值之和。
泊松分布:概率學中離散機率分布
1、我們先來看看這個Poisson Random Timer長得是啥樣子,路徑:執行緒組 > 添加 > 定時器 > 泊松隨機定時器,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Lambda(in milliseconds):蘭布達值;
Constant Delay Offset(in milliseconds):暫停的毫秒數減去隨機延遲的毫秒數。
3.3.1實例
1、新建測試計劃,執行緒組下添加2個取樣器 訪問部落格園首頁、訪問度娘,如下圖所示:
2、然後再添加泊松定時器,設置暫停時間會分布在100到400毫秒之間,如下圖所示:
3、配置好以後,點擊「保存」,運行JMeter,查看錶格結果(取樣器訪問部落格園首頁和訪問度娘間隔在100到400毫秒之間),如下圖所示:
3.4Synchronizing Timer
同步計時器,用來模擬多用戶並發,或者說更嚴格的並發場景,比如秒殺活動,就要用這個玩意了。
作用:也是用來設置集合點,阻塞執行緒,同步虛擬用戶,直到指定的執行緒數量到達後,恰好在同一時刻執行任務,再一起釋放,可以瞬間產生很大的壓力。
注意:敲黑板,敲腦袋!!!
一般情況,並發用戶數多少,同步定時器就寫多少。(多少並發就要等多少個人到齊一起釋放)
1、我們先來看看這個Synchronizing Timer長得是啥樣子,路徑:執行緒組 > 添加 > 定時器 > 同步定時器,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Number of Simulated Users to Group by:集合點個數 (執行的執行緒數),如果設置為0,等於設置為執行緒租中的執行緒數量。
Timeout in milliseconds:指定執行緒數多少秒沒集合到算超時(以毫秒為單位)。如果設置為0,該定時器將會等待執行緒數達到了”Number of Simultaneous Users toGroup”中設置的值才釋放,不夠的話就死等。如果大於0,那麼如果超過Timeout inmilliseconds中設置的最大等待時間後還沒達到”Number of Simultaneous Users toGroup”中設置的值,Timer將不再等待,釋放已到達的執行緒。默認為0
注意:敲黑板,敲腦袋!!!
(1)上面兩個參數如果都設置了值,則在實際中是哪個條件先達到,定時器先執行哪個,如第一個參數釋放執行緒數量先達到,則不會管超時時間的值,timer會釋放;如果第二個參數超時時間先達到,則不會再等執行緒數量,按照目前超時的時間點集合的執行緒數,timer釋放。
(2)同步定時器(Synchronizing Timer)的超時時間設置要求: 超時時間 > 請求集合數量 * 1000 / (執行緒數 / 執行緒載入時間)
執行緒組用戶數100,添加同步定時器
執行緒數(100) | 定時器等待執行緒數(視情況而定) | 超時設置(默認為0,單位毫秒) | 設置效果(腳本運行達到的效果) |
100 | 100 | 0 | 用戶等待達到100個用戶,同時並發請求 |
100 | 90 | 100 |
1、剛好超時100ms,且等到90個用戶並發請求; 2、等到90個用戶,未超時,繼續等到結束,再並發,這時用戶數將大於90; 3、等到小於90和用戶,又超過了設置100ms,那麼以等到的用戶並發請求,可能小於90; |
100 | 110 | 0 | 用戶無法達到110個用戶,執行緒將一直等待,不會停止; |
100 | 100 | 100 |
1、剛好超時100ms,等到100個用戶並發請求; 2、超時100ms後,定時器以等到的最大用戶數並發請求; 3、如果超時100ms,用戶數沒有到達100,將以等到的用戶數並發請求,這是用戶數可能小於100; |
100 | 0 | 0 | 定時器設置的用戶數等效於執行緒的用戶數,超時默認設置為0,用戶同時並發請求 |
3.4.1實例
a. 若某個請求需要並發測試,則可在該請求下添加同步定時器。
1、新建測試計劃,執行緒組(設置執行緒組10個,載入時間1s)下添加2個取樣器 訪問部落格園首頁(已禁用)、訪問度娘,如下圖所示:
2、然後再添加同步定時器,設置模擬用戶組數量:10,超時時間:5000,如下圖所示:
3、配置好以後,點擊「保存」,運行JMeter,查看錶格結果(幾乎是在同一時間,10個用戶同時並發訪問度娘),如下圖所示:
b. 若某幾個請求需要同時進行並發,則可在請求的同一級添加同步定時器。
1、新建測試計劃,執行緒組下添加2個取樣器 訪問部落格園首頁、訪問度娘,如下圖所示:
2、然後再添加同步定時器,設置模擬用戶組數量:10,超時時間:5000,如下圖所示:
3、配置好以後,點擊「保存」,運行JMeter,查看錶格結果(取樣器訪問部落格園首頁和訪問度娘間隔3s),如下圖所示:
c. 若某幾個執行緒需要同步並發,則可在測試計划下(執行緒組同一級)添加同步定時器(適用於多業務混合併發測試)。
1、新建測試計劃,添加同步定時器,設置模擬用戶組數量:10,超時時間:5000,如下圖所示:
2、然後再添加兩個執行緒組,一個執行緒組下添加2個取樣器 訪問部落格園首頁、訪問度娘,另一個執行緒組下添加1個取樣器 訪問度娘1,如下圖所示:
3、配置好以後,點擊「保存」,運行JMeter,查看錶格結果,如下圖所示:
3.5BeanShell Timer(重要-常用)
Bean Shell定時器,顧名思義是:互相交替,其節點下的取樣器交替執行。根據被控制器觸發執行次數,去依次執行控制器下的子節點<邏輯控制器、取樣器>。被觸發執行可以由執行緒組的執行緒數、循環次數、邏輯控制器觸發。
1、我們先來看看這個 Bean Shell定時器長得是啥樣子,路徑:執行緒組 > 添加 > 定時器 > Bean Shell定時器,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Reset Interpreter:每次迭代是否重置解析器,默認為false;在長時間運行的腳本中建議設置為true。
Parameters:BeanShell腳本的入參。入參可以是單個變數;也可以是數組,若是字元串數組,兩個元素之間用空格隔開;也可以是常量。
File Name:BeanShell腳本可以從腳本文件中讀取。
Script:在Script區直接寫BeanShell腳本。
3.5.1實例
1、新建測試計劃,執行緒組下添加2個取樣器 訪問部落格園首頁、訪問度娘,如下圖所示:
2、然後再添加Bean Shell定時器,腳本程式碼設置延遲時間5s,如下圖所示:
3、配置好以後,點擊「保存」,運行JMeter,查看結果樹(取樣器訪問部落格園首頁和訪問度娘間隔5s),如下圖所示:
4.小結
好了,今天到這裡JMeter的所有定時器就已經介紹完了,感謝你耐心的閱讀和學習。
您的肯定就是我進步的動力。如果你感覺還不錯,就請鼓勵一下吧!記得隨手點波 推薦 不要忘記哦!!!
別忘了點 推薦 留下您來過的痕迹