1.簡介
使用者實際操作時,並非是連續點選,而是存在很多停頓的情況,例如:使用者需要時間閱讀文字內容、填表、或者查詢正確的連結等。為了模擬使用者實際情況,在效能測試中我們需要考慮思考時間。若不認真考慮思考時間很可能會導致測試結果的失真。例如,估計的可支撐使用者數偏小。在效能測試中,訪問請求之間的停頓時間被稱之為思考時間,那麼如何模擬這種停頓呢?我們可以藉助JMeter的定時器實現。
JMeter中的定時器一般被我們用來設定延遲與同步。定時器的執行優先順序高於Sampler(取樣器),在同一作用域(例如控制器下)下有多個定時器存在時,每一個定時器都會執行,如果想讓某一定時器僅對某一Sampler有效,則可以把定時器加在此Sampler節點下。
2.預覽定時器
首先我們來看一下JMeter的定時器,路徑:執行緒組(使用者)->新增->定時器(Timer);我們可以清楚地看到JMeter5中共有9個定時器,如下圖所示:
如果上圖您看得不是很清楚的話,巨集哥總結了一個思維導圖,關於JMeter5的邏輯控制器型別,如下圖所示:
通過以上的瞭解,我們對定時器有了一個大致的瞭解和認識。下面巨集哥就給小夥伴或則童鞋們分享講解一些通常在工作中會用到的定時器。
4.常用定時器詳解
這一小節,巨集哥就由上而下地詳細地講解一下常用的定時器。
4.1Constant Timer
固定定時器,看名稱大家也知道是一個固定定時器,多用來模擬思考時間,顧名思義是:請求之間的間隔時間為固定值。
作用:通過ThreadDelay設定每個執行緒請求之前的等待時間(單位為毫秒)。注意:固定定時是有作用域的,放到執行緒組下其作用域是所有請求都會延遲固定器設定的時間,如果放到請求內,作用域是單個請求延遲時間(常用)。
1、我們先來看看這個Constant Timer長得是啥樣子,路徑:執行緒組 > 新增 > 定時器 > 固定定時器,如下圖所示:
2、關鍵引數說明如下:
Name:名稱,可以隨意設定,甚至為空;
Comments:註釋,可隨意設定,可以為空;
Thread Delay(in milliseconds):執行緒等待時間,單位毫秒。
用法(場景),更真實的模擬使用者場景,需要設定等待時間,或是等待上一個請求的時間,才執行,給sampler之間的思考時間;
4.1.1例項
場景應用:效能測試中,根據使用者操作預估時間,或者需要等待一段時間來載入資料。
PS:在實際模擬使用者請求的過程中,會失去靈活性,不推薦大量使用
1、新建測試計劃,執行緒組下新增2個取樣器 訪問部落格園首頁、訪問度娘,如下圖所示:
2、然後再新增固定定時器,設定延遲時間3000ms,即3s,如下圖所示:
3、配置好以後,點選“儲存”,執行JMeter,檢視錶格結果(取樣器訪問部落格園首頁和訪問度娘間隔3s),如下圖所示:
4.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: 固定延遲時間。
4.2.1例項
1、新建測試計劃,執行緒組下新增2個取樣器 訪問部落格園首頁、訪問度娘,如下圖所示:
2、然後再新增統一隨機定時器,設定延遲時間3s,如下圖所示:
3、配置好以後,點選“儲存”,執行JMeter,檢視錶格結果(取樣器訪問部落格園首頁和訪問度娘間隔4s = 1000ms + 3000ms),如下圖所示:
4.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:用來設定集合點,等到指定個數的請求後併發執行
4.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組,同時啟動。),如下圖所示:
4.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):同上,但每個執行緒是根據執行緒的上次執行時間來延遲。相當於讓所有執行緒組整體排隊。(不常用)
4.4.1例項
1、新建測試計劃,執行緒組下新增1個取樣器 訪問部落格園首頁(已禁用)、訪問度娘,如下圖所示:
2、然後再新增常數吞吐量定時器,設定目標吞吐量為300,如下圖所示:
3、配置好以後,點選“儲存”,執行JMeter,檢視jp@gc - Transactions per Second(常數吞吐量定時器設定300/分鐘,也就是5/秒,故tps最大5,這裡的tps大約都是5,說明已經超過5,可以往上增加了),如下圖所示:
5. 定時器的作用域
1. 定時器是在每個sampler(取樣器)之前執行的,而不是之後(無論定時器位置在sampler之前還是下面);
2. 當執行一個sampler之前時,所有當前作用域內的定時器都會被執行;
3. 如果希望定時器僅應用於其中一個sampler,則把定時器作為子節點加入;
4. 如果希望在sampler執行完之後再等待,則可以使用Test Action;
6.小結
6.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。感謝你耐心的閱讀和學習。
您的肯定就是我進步的動力。如果你感覺還不錯,就請鼓勵一下吧!記得隨手點波 推薦 不要忘記哦!!!
別忘了點 推薦 留下您來過的痕跡