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。
您的肯定就是我進步的動力。如果你感覺還不錯,就請鼓勵一下吧!記得隨手點波 推薦 不要忘記哦!!!
別忘了點 推薦 留下您來過的痕跡