三、Jmeter 定時器


首先需要清楚Jmeter中各個元件的執行順序:

元件的執行順序


 

了解了元件有作用域之后,來看看元件的執行順序,元件執行順序的規則很簡單,在同一作用域名范圍內,測試計划中的元件按照如下順序執行。

(1)配置元件(config elements )

(2)前置處理程序(Per-processors)

(3)定時器(timers )

(4)取樣器(Sampler)

(5)后置處理程序(Post-processors) (除非Sampler 得到的返回結果為空)。

(6)斷言(Assertions)(除非Sampler 得到的返回結果為空)。

(7)監聽器(Listeners)(除非Sampler 得到的返回結果為空)。

 

關於執行順序,有兩點需要注意:

*  前置處理器、后置處理器和斷言等元件公能對 取樣器作用,因此,如果在它們的作用域內沒有任何取樣器,則不會被執行。

*  如果在同一作用域范圍內有多個同一類型的元件,則這些元件按照它們在測試計划中的上下順序一次執行。

 

備注:執行順序依次為:配置元件(CSV Data Set Config)-前置處理器-定時器-取樣器-后置處理器-斷言-監聽器

 

一、定時器的作用域

1、定時器是在每個sampler(采樣器)之前執行的,而不是之后(無論定時器位置在sampler之前還是下面);

2、當執行一個sampler之前時,所有當前作用域內的定時器都會被執行;

3、如果希望定時器僅應用於其中一個sampler,則把定時器作為子節點加入;

4、如果希望在sampler執行完之后再等待,則可以使用Test Action;

 

二、定時器的作用

1、固定定時器(Constant Timer)

這是一個很重要的定時器,如果你需要讓每個線程在請求之前按相同的指定時間停頓,那么可以使用這個定時器;需要注意的是,固定定時器的延時不會計入單個sampler的響應時間,但會計入事務控制器的時間。

對於“java請求”這個sampler來說,定時器相當於loadrunner中的pacing(兩次迭代之間的間隔時間);

對於“事務控制器”來說,定時器相當於loadrunner中的think time(思考時間:實際操作中,模擬真實用戶在操作過程中的等待時間)。

這里附上一個傳送門,對loadrunner中的pacing和think time有比較全面的解釋:https://zhidao.baidu.com/question/1431215934913423459.html

我們通常說的響應時間,應該大部分情況下是針對某一個具體的sampler(http請求),而不是針對一組sampler組合的事務 。

 

 

2、固定吞吐量定時器(Constant Throughput Timer)

 

可以讓JMeter以指定數字的吞吐量(即指定TPS,只是這里要求指定每分鍾的執行數,而不是每秒)執行。

吞吐量計算的范圍可以為指定為當前線程、當前線程組、所有線程組等范圍,並且計算吞吐量的依據可以是最近一次線程的執行時延。這種定時器在特定的場景下,還是很有用的。

 

3、同步定時器(Synchronizing Timer)

 

這個定時器和loadrunner當中的集合點(rendezvous point)作用相似,其作用是:阻塞線程,直到指定的線程數量到達后,再一起釋放,可以瞬間產生很大的壓力(人多力量大- -哈哈!)

(1)Number of Simulated Users to Group by:模擬用戶的數量,即指定同時釋放的線程數數量

(2)Timeout in milliseconds:超時時間,即超時多少毫秒后同時釋放指定的線程數

 

思考:超時時間一般情況設置多大???

首先,要清楚為什么要設置這個超時時間?

1、實際運行過程中,可能出現始終無法達到集合點設置的並發要求;如果出現這種情況的話Jmeter會一直卡頓在那里,等待滿足要求,才會繼續往下執行;

2、為了避免上述情況的發生,我們需要設置一下集合點的超時時間

  設置規則為:因為集合點超時時間的單位為ms

  計算公式:超時時間/1000 > 集合並發數/(設置線程數/啟動加載時間)

 

性能測試中我們經常提到一個概念就是“並發”,其實在實際真實的性能測試中是不存在真正的並發的。為了更真實的模擬對一個請求的並發測試場景,我們通常設置一個集合點,JMeter中提供了這樣的一個功能設置。

那么集合點的大致概念是什么呢?

簡單理解就是:設置一個閥值(請求數量),當請求數達到這個閥值時,允許請求同時發出。例如:想測試一座橋的並發(忽略載重等其他因素,只考慮通過),那么並發的請求就是類似於多少輛車可同時通過橋,而車輛一般情況下是不可能同時通過橋的,因而我們可以在橋頭A,設置一個集合點,等車輛數滿足一定的數量,同時讓車輛通過此橋。

添加路徑:右鍵單擊線程組,依次選擇【添加/定時器/Synchronizing Timer】即可添加集合點

添加后,顯示如下圖所示:

PS:超時時間為0時,默認無超時限制。

 

實際運行過程中,可能出現請求數當不滿足集合點設置的請求數時,JMeter一直卡頓在如下頁面:

 

解決辦法是:設置同步定時器的超時時間。

同步定時器(Synchronizing Timer)的超時時間設置要求:

超時時間 > 請求集合數量 * 1000 / (線程數 / 線程加載時間)

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM