1.簡介
Jmeter官網對邏輯控制器的解釋是:“Logic Controllers determine the order in which Samplers are processed.”。
意思是說,邏輯控制器可以控制取樣器(samplers)的執行順序。由此可知,控制器需要和取樣器一起使用,否則控制器就沒有什麼意義了。放在控制器下面的所有的取樣器都會當做一個整體,執行時也會一起被執行。
JMeter邏輯控制器可以對元件的執行邏輯進行控制,除僅一次控制器外,其他可以巢狀別的種類的邏輯控制器。
2.邏輯控制器分類
JMeter中的Logic Controller分為兩類:
(1)控制測試計劃執行過程中節點的邏輯執行順序,如:Loop Controller、If Controller等;
(2)對測試計劃中的指令碼進行分組、方便JMeter統計執行結果以及進行指令碼的執行時控制等,如:Throughput Controller、Transaction Controller。
3.預覽邏輯控制器
首先我們來看一下JMeter的邏輯控制器,路徑:執行緒組(使用者)->新增->邏輯控制器(Logic Controller);我們可以清楚地看到JMeter5中共有17個邏輯控制器,如下圖所示:
如果上圖您看得不是很清楚的話,巨集哥總結了一個思維導圖,關於JMeter5的邏輯控制器型別,如下圖所示:
通過以上的瞭解,我們對邏輯控制器有了一個大致的瞭解和認識。下面巨集哥就給小夥伴或則童鞋們分享講解一些通常在工作中會用到的邏輯控制器。
4.常用邏輯控制器詳解
這一小節,巨集哥就由上而下地詳細地講解一下常用的邏輯控制器。
4.1Runtime Controller
執行控制器用來控制其子元件的執行時長。市場單位是秒。
1、我們先來看看這個Runtime Controller長得是啥樣子,路徑:執行緒組 > 新增 > 邏輯控制器 > 執行控制器,如下圖所示:
2、關鍵引數說明如下:
Name:名稱,可以隨意設定,甚至為空;
Comments:註釋,可隨意設定,可以為空;
Runtime:預設為1,去掉1則預設為0,此時不執行其節點下的元件。 與執行緒組中的排程器的持續時間 效果一致。不填 或 0,不會執行樣例
4.1.1Runtime控制器控制其下取樣器執行2s
1、建立測試計劃,設定 Runtime 控制器的執行時間 為 2,執行緒組設定預設不變,如下圖所示:
Runtime 控制器設定
執行緒組設定
2、配置好以後,執行JMeter,然後檢視結果樹,如下圖所示:
4.1.2使用執行緒組中的排程器控制樣例執行3s
1、建立測試計劃,設定 Runtime 控制器的執行時間 為 2,執行緒組設定執行時間3,如下圖所示:
執行緒組設定
Runtime 控制器設定
2、配置好以後,執行JMeter,然後檢視結果樹,如下圖所示:
執行緒組設定3,Runtime控制器設定2,但是執行時間是2s。所以從上邊的執行時間得出結論:如果執行緒組中設定了持續時間,Runtime 控制器也設定了 執行時間,那麼會優先於執行緒組中的設定。
4.2Simple Controller
Simple Controller用來指定了一個執行單元,它不改變元件的執行順序。在它下邊還可以巢狀其他控制器。簡單控制器可以編輯只有名稱和註釋。就像他的名字一樣,簡單,可以理解為一個資料夾,就是分組用的,沒有其他特殊功能,但相比不新增簡單控制器,區別在於簡單控制器可以被模組控制器所引用。其作用就是分組,比如QQ好友列表,可分為家人、同學、等。一般是請求較多,需要分組時採用。
1、我們先來看看這個Simple Controller長得是啥樣子,路徑:執行緒組 > 新增 > 邏輯控制器 > 簡單控制器,如下圖所示:
2、關鍵引數說明如下:
Name:名稱,可以隨意設定,甚至為空;
Comments:註釋,可隨意設定,可以為空。
4.2.1簡單例項
1、建立測試計劃,執行緒組設定迴圈10,如下圖所示:
2、配置好以後,執行JMeter,然後檢視結果樹,如下圖所示:
4.3Throughput Controller
用來控制其下元件的執行次數,並無控制吞吐量的功能,想要控制吞吐量可以使用Constant Throughput Timer,後邊會講解到。吞吐量控制器有兩種模式:Total Executions:設定執行次數與Percent Executions:設定執行比例(1~100之間)。
1、我們先來看看這個Throughput Controller長得是啥樣子,路徑:執行緒組 > 新增 > 邏輯控制器 > 吞吐量控制器,如下圖所示:
2、關鍵引數說明如下:
Name:名稱,可以隨意設定,甚至為空;
Comments:註釋,可隨意設定,可以為空;
Total Executions:執行百分比(1-100);
percent Executions:執行數量;
Throughput:根據上邊選擇的方式填寫,百分比為0~100;
4.3.1不勾選Per User
1、執行緒組中設定 執行緒數量 2,迴圈次數 10,吞吐量控制器 設定 Total Executions,吞吐量設定為 2,其下新增一個取樣器,如下圖所示:
2、配置好以後,執行JMeter,然後檢視結果樹(執行了2次),如下圖所示:
3、現在將 吞吐量控制器 設定為百分比的控制方式,吞吐量設定為:50%,如下圖所示:
4、配置好以後,點選“儲存”執行JMeter,然後檢視結果樹(執行了10次,計算方式:10=吞吐量50% * 迴圈次數10 * 執行緒數 2),如下圖所示:
4.3.2勾選Per User
1、執行緒組中設定 執行緒數量 2,迴圈次數 10,吞吐量控制器 設定 Total Executions,吞吐量設定為 2,其下新增一個取樣器,勾選Per User,如下圖所示:
執行緒組設定
吞吐量控制器
2、配置好以後,點選“儲存”,執行JMeter,然後檢視結果樹(總共執行了4次,其中吞吐量設定為2,執行2次,執行緒設定為2,執行2次,總共4次),函式 __threadNum 只是簡單地返回當前執行緒的編號,如下圖所示:
3、現在將 吞吐量控制器 設定為百分比的控制方式,吞吐量設定為:50,如下圖所示:
4、配置好以後,點選“儲存”執行JMeter,然後檢視結果樹(執行了10次,計算方式:10=吞吐量50% * 迴圈次數10 * 執行緒數 2),如下圖所示:
綜上所述:
勾選Per User:
1.執行緒數*迴圈次數>=執行緒數*吞吐量時,Total Executions模式的執行次數=執行緒數*吞吐量。
2.執行緒數*迴圈次數<執行緒數*吞吐量時,Total Executions模式的執行次數=當執行緒數*迴圈次數。
不勾選Per User:
1.執行緒數*迴圈次數<=吞吐量時,Total Executions模式的執行次數=執行緒數*迴圈次數。
2.執行緒數*迴圈次數>吞吐量時,Total Executions模式的執行次數=吞吐量。
l Percent Executions:設定執行比例(1~100之間),單位為%
不管Per User是否勾選,按Percent Executions模式的執行次數都不受Per User影響,Percent Executions模式的執行次數=執行緒數*迴圈次數*吞吐量%。(迴圈次數=執行緒組迴圈次數*迴圈控制器迴圈次數)
l Per User:勾選該項的話則按虛擬使用者數(執行緒數)來計算執行次數,不勾選則按所有虛擬使用者數來計算執行次數
序號 | 執行緒數 | 迴圈次數 | 模式 | Throughput | Per User | 執行次數 |
1 | 2 | 10 | Percent | 50 | Y | 10 |
2 | 2 | 10 | Percent | 50 | N | 10 |
3 | 2 | 10 | Total | 7 | Y | 14 |
4 | 2 | 10 | Total | 7 | N | 7 |
5 | 2 | 2 | Total | 7 | Y | 4 |
6 | 2 | 2 | Total | 7 | N | 4 |
下面說明一下這6個場景:
(1)序號1和2場景,Per User 對總執行次數沒有影響。
(2)序號3場景,Per User勾選,每個虛擬使用者(執行緒)執行7次,共執行14次。
(3)序號4場景,Per User不勾選,則所有虛擬使用者執行7次。
(4)序號5場景,Per User勾選,每個虛擬使用者(執行緒)執行7次,共執行14次,由於Thread Group計劃迴圈次數是4(2執行緒*2迴圈)次,所以最多隻能執行4次。
(5)序號6場景,Per User不勾選,所有虛擬使用者執行7次,由於Thread Group計劃迴圈次數是4(2執行緒*2迴圈)次,所以最多隻能執行4次。
4.4Module Controller
模組控制器可以快速的切換指令碼,不用來回的新建,方便指令碼除錯。
可以理解為引用、呼叫的意思,執行內容為Module To Run種所選的內容,引用範圍為當前測試計劃內的測試片段、邏輯控制器<模組控制器除外>
被引用的邏輯控制器、測試片段可以為禁用狀態,被引用後仍然會被執行。
可以將模組控制器與包括控制器一起學習比較,模組控制器是從內部檔案中引用,引用上相對比較靈活,可以只引用部分測試片段或模組內容,包括控制器是從外部檔案引用,只能引用整個測試片段的內容。
注意:被應用的模組位置不可隨意變更,變更後會執行時出現提示引用失敗
找到目標元素:快速查詢與跳轉的作用,點選後會立即跳轉到所選的邏輯控制器的內容詳情
1、我們先來看看這個Module Controller長得是啥樣子,路徑:執行緒組 > 新增 > 邏輯控制器 > 模組控制器,如下圖所示:
2、關鍵引數說明如下:
Name:名稱,可以隨意設定,甚至為空;
Comments:註釋,可隨意設定,可以為空;
Forever:勾選上這一項表示一直迴圈下去。
4.4.1例項
1、建立測試計劃,新增兩個測試片段,並且在每個測試片段下新增一個取樣器,然後,新增執行緒組,再新增模組控制器,最後新增檢視結果樹,如下圖所示:
2、配置模組控制器,選擇第一個測試片段,如下圖所示:
3、配置好以後,點選“儲存”執行JMeter,然後檢視結果樹(執行了第1個測試片段的取樣器),如下圖所示:
4、配置模組控制器,選擇第二個測試片段,如下圖所示:
5、配置好以後,點選“儲存”執行JMeter,然後檢視結果樹(執行了第2個測試片段的取樣器),如下圖所示:
4.5Switch Controller
Switch Controller:開關控制器,通過其下樣例順序數值或名稱 控制執行某一個樣例。
1、我們先來看看這個if Controller長得是啥樣子,路徑:執行緒組 > 新增 > 邏輯控制器 > 如果 (if) 控制器,如下圖所示:
2、關鍵引數說明如下:
Name:名稱,可以隨意設定,甚至為空;
Comments:註釋,可隨意設定,可以為空;
Switch Value:指定請求的索引或者名稱,索引從0開始,如果沒有賦值,或者索引超過請求個數的話就執行第0個請求。可以是數字,也可以是字元,為字元時匹配取樣器名稱,如果匹配不上就會預設並找取樣器名稱為default的取樣器,如果沒有則不執行。
4.5.1數值
數值:表示將執行其下第 數值+1個取樣器,例如:填1,將執行第2個取樣器;填0或者不填,將執行第1個取樣器;數值超出其下取樣器數目時,執行第1個取樣器。
1、建立一個測試計劃,設定執行緒組和Switch控制器,如下圖所示:
執行緒組
Switch控制器
2、配置好以後,點選“儲存”執行JMeter,然後檢視結果樹(執行了第3<數值+1>個取樣器),如下圖所示:
3、修改Switch控制器的數值為0或者不填,如下圖所示:
4、配置好以後,點選“儲存”執行JMeter,然後檢視結果樹(執行了第1<數值為0或者不填,執行第1個取樣器>個取樣器),如下圖所示:
4.5.2字元
1、建立一個測試計劃,設定執行緒組和Switch控制器(直接使用取樣器名字),如下圖所示:
執行緒組
Switch控制器
2、配置好以後,點選“儲存”執行JMeter,然後檢視結果樹(執行了使用名字的取樣器),如下圖所示:
5.小結
好了,今天關於邏輯控制器的上篇就講解到這裡,這一篇主要介紹了 Runtime Controller 、 Simple Controller 、Throughput Controller、Module Controller 和 Switch Controller。
您的肯定就是我進步的動力。如果你感覺還不錯,就請鼓勵一下吧!記得隨手點波 推薦 不要忘記哦!!!
別忘了點 推薦 留下您來過的痕跡