🔥Jmeter(十三) - 從入門到精通 - JMeter 定時器 - 上篇(詳解教程)
1.簡介
使用者實際操作時,並非是連續點選,而是存在很多停頓的情況,例如:使用者需要時間閱讀文字內容、填表、或者查詢正確的連結等。為了模擬使用者實際情況,在效能測試中我們需要考慮思考時間。若不認真考慮思考時間很可能會導致測試結果的失真。例如,估計的可支撐使用者數偏小。在效能測試中,訪問請求之間的停頓時間被稱之為思考時間,那麼如何模擬這種停頓呢?我們可以藉助 JMeter 的定時器實現。
JMeter 中的定時器一般被我們用來設定延遲與同步。定時器的執行優先順序高於 Sampler(取樣器),在同一作用域(例如控制器下)下有多個定時器存在時,每一個定時器都會執行,如果想讓某一定時器僅對某一 Sampler 有效,則可以把定時器加在此 Sampler 節點下。
2.預覽定時器
首先我們來看一下 JMeter 的定時器,路徑:執行緒組(使用者)->新增->定時器(Timer);我們可以清楚地看到 JMeter5 中共有 9 個定時器,如下圖所示:
如果上圖您看得不是很清楚的話,宏哥總結了一個思維導圖,關於 JMeter5 的邏輯控制器型別,如下圖所示:
透過以上的瞭解,我們對定時器有了一個大致的瞭解和認識。下面宏哥就給小夥伴或則童鞋們分享講解一些通常在工作中會用到的定時器。
3.常用定時器詳解
這一小節,宏哥就由上而下地詳細地講解一下常用的定時器。
3.1Constant Timer
固定定時器,看名稱大家也知道是一個固定定時器,多用來模擬思考時間,顧名思義是:請求之間的間隔時間為固定值。
作用:透過 ThreadDelay 設定每個執行緒請求之前的等待時間(單位為毫秒)。注意:固定定時是有作用域的,放到執行緒組下其作用域是所有請求都會延遲固定器設定的時間,如果放到請求內,作用域是單個請求延遲時間(常用)。
1、我們先來看看這個Constant Timer長得是啥樣子,路徑: 執行緒組 > 新增 > 定時器 > 固定定時器 ,如下圖所示:
2、關鍵引數說明如下:
Name: 名稱,可以隨意設定,甚至為空;
Comments: 註釋,可隨意設定,可以為空;
Thread Delay(in milliseconds): 執行緒等待時間,單位毫秒。
用法 (場景),更真實的模擬使用者場景,需要設定等待時間,或是等待上一個請求的時間,才執行,給 sampler 之間的思考時間;
3.1.1 例項
場景應用:效能測試中,根據使用者操作預估時間,或者需要等待一段時間來載入資料。
PS:在實際模擬使用者請求的過程中,會失去靈活性,不推薦大量使用
1、新建測試計劃,執行緒組下新增 2 個取樣器 訪問部落格園首頁、訪問度娘,如下圖所示:
2、然後再新增固定定時器,設定延遲時間 3000ms,即 3s,如下圖所示:
3、配置好以後,點選 “儲存”,執行 JMeter,檢視錶格結果(取樣器訪問部落格園首頁和訪問度娘間隔 3s),如下圖所示:
3.2Uniform Random Timer
統一(均勻)隨機定時器,也是讓執行緒暫停一個隨機時間,只不過力求隨機時間能夠更均勻,都會出現。均勻隨機定時器,顧名思義,它產生的延遲時間是個隨機值,而各隨機值出現的機率均等。總的延遲時間等於一個隨機延遲時間加上一個固定延遲時間,使用者可以設定隨機延遲時間和固定延遲時間。
作用:它產生的延遲時間是個隨機值,而各隨機值出現的機率均等。總的延遲時間等於一個隨機延遲時間加上一個固定延遲時間,使用者可以設定隨機延遲時間和固定延遲時間。每個執行緒的延遲時間是符合標準正態分佈的隨機時間停頓,那麼使用這個定時器,總延遲 = 高斯分佈值(平均 0.0 和標準偏差 1.0)* 指定的偏差值 + 固定延遲偏移 (Math.abs((this.random.nextGaussian() * 偏差值) + 固定延遲偏移))
總延遲時間 = 指定範圍內的隨機時間(在範圍內各隨機值等機率)+ 固定延遲時間
1、我們先來看看這Uniform Random Timer長得是啥樣子,路徑: 執行緒組 > 新增 > 定時器 > 統一隨機定時器 ,如下圖所示:
2、關鍵引數說明如下:
Name: 名稱,可以隨意設定,甚至為空;
Comments: 註釋,可隨意設定,可以為空;
Random Delay Maximum: 最大隨機延遲時間;
Constant Delay Offset: 固定延遲時間。
3.2.1 例項
1、新建測試計劃,執行緒組下新增 2 個取樣器 訪問部落格園首頁、訪問度娘,如下圖所示:
2、然後再新增統一隨機定時器,設定延遲時間 3s,如下圖所示:
3、配置好以後,點選 “儲存”,執行 JMeter,檢視錶格結果(取樣器訪問部落格園首頁和訪問度娘間隔 4s = 1000ms + 3000ms),如下圖所示:
3.3Precise Throughput Timer
準確的吞吐量定時器,顧名思義,這個就是控制吞吐量的。和 Constant Throughput Timer 類似,但是能更精準的控制請求。區別就是 Constant Throughput Timer 根據時間來做定時器(到了多少秒就發請求);Precise Throughput Timer 是根據吞吐量在做計時器(到了多少量就發請求)。也就是能做到控制請求的速度和個數。
1、我們先來看看這個Precise Throughput Timer長得是啥樣子,路徑: 執行緒組 > 新增 > 定時器 > 準確的吞吐量定時器 ,如下圖所示:
2、關鍵引數說明如下:
Name: 名稱,可以隨意設定,甚至為空;
Comments: 註釋,可隨意設定,可以為空;
Thread Delay: 忽略子控制器,即子控制器失效,由交替控制器接管。
Target Throught: 目標吞吐量
Throught Period: 表示在多長時間內傳送 Target Throught 指定的請求數 (以秒為單位)
Test Druation: 指定測試執行時間 (以秒為單位)
Number of threads in the bath :用來設定集合點,等到指定個數的請求後併發執行
3.3.1 例項
1、新建測試計劃,執行緒組(設定執行緒組,保證有足夠的時間)下新增 2 個取樣器 訪問部落格園首頁(已停用)、訪問度娘,如下圖所示:
2、然後再新增準確的吞吐量定時器,設定 10 個吞吐量,設定 10s 啟動完 10 個請求,設定執行時間 20s,如下圖所示:
3、配置好以後,點選 “儲存”,執行 JMeter,檢視錶格結果(大約用了 20 秒啟動了 21 個執行緒),如下圖所示:
4、設定集合點在 Precise Throughput Timer 中設定集合點為 10,其它引數不變,如下圖所示:
5、在 Thread Group 中設定執行緒數為 10,如下圖所示:
6、配置好以後,點選 “儲存”,執行 JMeter,檢視錶格結果(可以看到,每 10 個執行緒為 1 組,同時啟動。),如下圖所示:
3.4Constant Throughput Timer
固定吞吐量定時器,這個定時器引入了變數暫停,透過計算使總吞吐量(以每分鐘去楊樹計)儘可能接近給定的數字。當然,如果伺服器不能處理它,或者如果其他定時器或耗時的測試原件阻止它,那麼吞吐量將更低。
雖然計時器被稱為常數吞吐量定時器,但吞吐量值並不一定是常數。它可以根據變數或函式呼叫定義,並且可以在測試期間改變該值。透過以下多種方式都可以改變:
使用計數器變數
使用一個 __jexl3, __groovy 函式來提供一個變化的值
使用遠端 BeeShell 伺服器更改 Jmeter 屬性
請注意,在測試期間,不應該頻繁地更改吞吐量值——新值生效需要一段時間。
常數吞吐量定時器作用:控制吞吐量(線上壓測時候,避免一下就上百上千的吞吐量影響線上效能,加上這個之後較安全,可以一點一點往上加); 按指定的吞吐量執行,以每分鐘為單位。計算吞吐量依據是最後一次執行緒的執行時延。
作用域:此定時器放在請求的下級,只對它的上級請求起作用
1、我們先來看看這個Constant Throughput Timer長得是啥樣子,路徑: 執行緒組 > 新增 > 定時器 > 常數吞吐量定時器 ,如下圖所示:
2、關鍵引數說明如下:
Name: 名稱,可以隨意設定,甚至為空;
Comments: 註釋,可隨意設定,可以為空;
Target throughput(in samples per minute): 目標吞吐量。注意這裡是每分鐘傳送的請求數,可以選擇作用的執行緒:當前執行緒、當前執行緒組、所有執行緒組等,具體含義如下:
this thread only: 設定每個執行緒的吞吐量。總的吞吐量=執行緒數 * 該值。
all active threads in current thread group: 吞吐量被分攤到當前執行緒組所有的活動執行緒上。每個執行緒將根據上次執行時間延遲。
all active threads: 吞吐量被分配到所有執行緒組的所有活動執行緒的總吞吐量。每個執行緒將根據上次執行時間延遲。在這種情況下,每個執行緒組需要一個具有相同設定的固定吞吐量定時器。(不常用)
all active threads in current thread group (shared): 同上,但是每個執行緒是根據組中的執行緒的上一次執行時間來延遲。相當於執行緒組組內排隊。(不常用)
all active threads (shared): 同上,但每個執行緒是根據執行緒的上次執行時間來延遲。相當於讓所有執行緒組整體排隊。(不常用)
3.4.1 例項
1、新建測試計劃,執行緒組下新增 1 個取樣器 訪問部落格園首頁(已停用)、訪問度娘,如下圖所示:
2、然後再新增常數吞吐量定時器,設定目標吞吐量為 300,如下圖所示:
3、配置好以後,點選 “儲存”,執行 JMeter,檢視 jp@gc - Transactions per Second(常數吞吐量定時器設定 300/分鐘,也就是 5/秒,故 tps 最大 5,這裡的 tps 大約都是 5,說明已經超過 5,可以往上增加了),如下圖所示:
4. 定時器的作用域
1. 定時器是在每個 sampler(取樣器)之前執行的,而不是之後(無論定時器位置在 sampler 之前還是下面);
2. 當執行一個 sampler 之前時,所有當前作用域內的定時器都會被執行;
3. 如果希望定時器僅應用於其中一個 sampler,則把定時器作為子節點加入;
4. 如果希望在 sampler 執行完之後再等待,則可以使用 Test Action;
5.小結
5.1 安裝外掛管理
1、安裝前檢視選項,沒有看到外掛管理,如下圖所示:
2、想安裝一個 jmeter 的外掛,到官網(http://jmeter-plugins.org)上去下載外掛安裝包,但是頁面一直都是搜尋狀態,如下圖所示:
3、然後宏哥找了一個下載一個 jmeter 的外掛管理工具 地址: http://jmeter-plugins.org/get/
4、將下載的檔案複製的你的 JMeter 根目錄下的 lib/ext
目錄,如下圖所示:
5、 重啟 jmeter,在選項中可以看到外掛管理工具已經安裝成功,如下圖所示:
6、勾選要下載的外掛,點選 Apply changes and restart JMeter 按鈕就完成了
Installed Plugins:用於檢視已安裝的外掛,並可透過 取消勾選
- 應用操作
來解除安裝外掛
Available Plugins:用於檢視和安裝可用的外掛,透過 勾選 - 應用操作(右下側有按鈕 Apply changes and restart JMeter)來安裝外掛
Upgrades:用於升級外掛
好了,今天關於定時器的上篇就講解到這裡,這一篇主要介紹了 Constant Timer 、 Uniform Random Timer 、Precise Throughput Timer和 ** Constant Throughput Timer** 。感謝你耐心的閱讀和學習。
相關文章
- Jmeter(十三) - 從入門到精通 - JMeter定時器 - 上篇(詳解教程)JMeter定時器
- 🔥Jmeter(九) - 從入門到精通 - JMeter 邏輯控制器 - 上篇(詳解教程)JMeter
- Jmeter(二十三) - 從入門到精通 - JMeter函式 - 上篇(詳解教程)JMeter函式
- Jmeter(十九) - 從入門到精通 - JMeter監聽器 -上篇(詳解教程)JMeter
- 🔥Jmeter(八) - 從入門到精通 - JMeter 配置元件(詳解教程)JMeter元件
- Jmeter(十四) - 從入門到精通 - JMeter定時器 - 下篇(詳解教程)JMeter定時器
- Jmeter(九) - 從入門到精通 - JMeter邏輯控制器 - 上篇(詳解教程)JMeter
- 🔥Jmeter(十) - 從入門到精通 - JMeter 邏輯控制器 - 中篇(詳解教程)JMeter
- 🔥Jmeter(十一) - 從入門到精通 - JMeter 邏輯控制器 - 下篇(詳解教程)JMeter
- Jmeter(二十一) - 從入門到精通 - JMeter斷言 - 上篇(詳解教程)JMeter
- Jmeter(二十) - 從入門到精通 - JMeter監聽器 -下篇(詳解教程)JMeter
- Jmeter(八) - 從入門到精通 - JMeter配置元件(詳解教程)JMeter元件
- Jmeter(十) - 從入門到精通 - JMeter邏輯控制器 - 中篇(詳解教程)JMeter
- Jmeter(十一) - 從入門到精通 - JMeter邏輯控制器 - 下篇(詳解教程)JMeter
- Jmeter(十二) - 從入門到精通 - JMeter邏輯控制器 - 終篇(詳解教程)JMeter
- Jmeter(二十四) - 從入門到精通 - JMeter函式 - 中篇(詳解教程)JMeter函式
- Jmeter(二十二) - 從入門到精通 - JMeter斷言 - 下篇(詳解教程)JMeter
- 🔥Jmeter(六) - 從入門到精通 - 建立資料庫測試計劃(詳解教程)JMeter資料庫
- Jmeter(四十三) - 從入門到精通高階篇 - Jmeter之IP偽裝和欺騙(詳解教程)JMeter
- Jmeter(三十三) - 從入門到精通 - Jmeter Http協議錄製指令碼工具-Badboy6(詳解教程)JMeterHTTP協議指令碼
- Jmeter(五十一) - 從入門到精通高階篇 - jmeter之運動戰(詳解教程)JMeter
- Jmeter(四十八) - 從入門到精通高階篇 - Jmeter監控伺服器效能(詳解教程)JMeter伺服器
- Jmeter(五十四) - 從入門到精通高階篇 - 如何在linux系統下執行jmeter指令碼 - 上篇(詳解教程)JMeterLinux指令碼
- Jmeter(二十七) - 從入門到精通 - Jmeter Http協議錄製指令碼(詳解教程)JMeterHTTP協議指令碼
- Jmeter(三十四) - 從入門到精通進階篇 - 引數化(詳解教程)JMeter
- Jmeter(三十) - 從入門到精通 - Jmeter Http協議錄製指令碼工具-Badboy3(詳解教程)JMeterHTTP協議指令碼
- 🔥Jmeter(七) - 從入門到精通 - 建立資料庫測試計劃實戰<MySQL 資料庫>(詳解教程)JMeter資料庫MySql
- Jmeter(三十二) - 從入門到精通 - Jmeter Http協議錄製指令碼工具-Badboy5(詳解教程)JMeterHTTP協議指令碼
- Jmeter(二十六) - 從入門到精通 - 搭建開源論壇JForum(詳解教程)JMeter
- Jmeter(四十九) - 從入門到精通高階篇 - jmeter使用監視器結果監控tomcat效能(詳解教程)JMeterTomcat
- Jmeter(四十六) - 從入門到精通高階篇 - Jmeter之網頁圖片爬蟲-下篇(詳解教程)JMeter網頁爬蟲
- Jmeter(四十一) - 從入門到精通進階篇 - Jmeter配置檔案的刨根問底 - 下篇(詳解教程)JMeter
- Jmeter(五十二) - 從入門到精通高階篇 - jmeter之跨執行緒組傳遞引數(詳解教程)JMeter執行緒
- Jmeter(四十二) - 從入門到精通進階篇 - Jmeter配置檔案的刨根問底 -番外篇(詳解教程)JMeter
- Jmeter(四十四) - 從入門到精通高階篇 - Jmeter遠端啟動(本地執行+遠端執行)(詳解教程)JMeter
- Jmeter入門教程JMeter
- JMeter定時器種類+詳細教程舉例JMeter定時器
- Jmeter(五) - 從入門到精通 - 建立網路計劃實戰和建立高階Web測試計劃(詳解教程)JMeterWeb