今天來分享下Jmeter中的2款循環控制器,ForEach Controller和Loop Controller,在使用上還是有所區別。
ForEach Controller
ForEach Controller簡介
ForEach Controller可以理解為迭代器(iterator),就是遍歷當前符合條件的所有數據,可用於Jmeter腳本中的參數化。
我們直接看圖來說,如下所示:
如上所示,就是ForEach Controller的配置界面,界面有如下參數,一一講解:
-
Name:控制器名稱,可根據用戶需要任意填寫,也可不填
-
Comments:用戶可根據需要任意填寫,也可不填
-
Input variable prefix:輸入變量前綴,數據來源:①用戶可以在“用戶自定義變量”中定義一組變量,循環控制器可以從中獲取到變量對應值,然后作為循環條件;②用戶可將提取的參數作為循環條件
-
Start index for loop(exclusive): 開始循環字段,循環變量下標起點(不包含)
-
End index for loop(inclusive):循環變量下標終點(包含)
-
Output variable name:輸出變量名稱,循環控制器生成的變量名稱,引用時填寫的參數名稱與輸出變量名稱一致
-
Add "_"before number?:數字之前加上下划線“_”,變量前綴是否加“_”作為分隔符
ForEach Controller使用
我們直接通過案例來看,ForEach Controller如何使用。如上所述,變量的來源,取自於2種情況,那我們就一一了解下。不過在操作之前,各自要有Jmeter環境哦,環境配置可以參考以前博文。
用戶定義變量
用戶定義變量是配置元件中的一個元件,可定義參數,便於后續接口直接使用,也是參數化的一種方式。元件添加入口如下所示:
我們來定義一組數據,我就以自己的博客為例了,配置參數后,如下所示:
我們可以看出,變量名稱是有規律可循的,都是以wd_number開頭。或許有疑問,為什么要這樣來設置,繼續往下看,馬上就能知道其作用了。
參數來源我們配置好后,這就需要在ForEach Controller配置對應數據了,跟上節奏一起來。
我們在之前ForEach Controller簡介中了解到,有個參數是Input variable prefix 輸入變量前綴
,在這里輸入的內容就是wd_number
。因為我們在用戶定義變量的元件中,配置的一組數據都是以此開頭的。
Start index for loop(exclusive)
和End index for loop(inclusive)
可以不配置,非必填數據。如果配置的話,需要注意的是,起始位是不包含的,這個到時候具體看案例截圖就清楚。
Output variable name
輸出變量,這個參數是用於后續參數的引用名稱,比如我們平時用到的正則提取器,也是需要定義一個變量的,同一個意思。
Add "\_"before number
這個是看各自定義的變量名稱是怎樣的,變量間有_
,則需要勾選,沒有的話,不勾選即可。
配置結果如下所示:
我們再用outwd
變量引用到對應接口參數中即可,如下所示:
到現在為止,已經完成了配置步驟,我們直接來運行腳本,看下運行結果,如下所示:
從運行的結果可以看出,我們並沒有設置循環次數,可為什么是5次了,是因為我們設置的變量只有5個,並且是依次替換變量請求接口,這不就是普通的參數化嘛,是不是很簡單。
剛才的結果,我們沒有配置循環的起止位,現在我們配置上起止位,配置如下:
再次運行腳本,看下是什么個結果,如下所示:
從上圖運行的結果可以很清楚明了的看出其作用,起始位是不包含
的,結束位是包含
,配置為1和3,所以運行結果是取2和3的參數來請求接口。
提取參數
提取參數同樣以博客為例,每個人的博客都有三個列表,閱讀排行榜、最新評論、推薦排行榜,剛好可以用於此demo。
可以看下數據,都是一個a標簽,如下所示:
通過用戶定義變量的方式,大家肯定有思路,提取參數如何實現了。
我們通過正則,將15條數據提取,並把對應參數配置到ForEach Controller即可。
那我們就先實現正則匹配這一步,正則相關知識自己另外補充,也可以參考我以前的博文,今天就不贅述了。我們觀察要提取的數據,都是有規律可循的,添加正則提取器,並配置如下所示:
這里需要注意的是,Match No.
,我們在這里配置為-1
,因為需要符合條件的所有值:
- 配置為0,表示隨機值;
- 配置為正整數,表示取匹配到的第幾個數據;
- 配置為-1,表示取匹配到的所有數據。
正則配置好后,可以運行腳本,看下是否正常提取到了數據,調試也是寫腳本的一部分工作。
我們再來配置ForEach Controller,如下所示:
再將輸出變量引用到對應接口參數中,如下所示:
我們來運行腳本,看下整體效果,如下所示:
如上所示,分別請求了15次接口,使用起來是不是很方便,到此,是不是已經可以上手使用起來了,參數化就是這么簡單。
Loop Controller
Loop Controller簡介
Loop Controller,功能擴展性不強,只能配置為無限循環和具體循環次數,主要用於測試接口重復調用的情況。
我們通過配置界面來了解下,如下所示:
根據上圖,來了解下參數配置:
- Loop Controller:元件名稱
- Name:控制器名稱
- Comments:注釋
- Loop Count:設置運行次數,Infinite 勾選表示為永久運行
Loop Controller使用
Loop Controller使用很簡單,我們看了配置界面就很清楚,無非就是配置循環次數,或者一直無限循環。
指定循環次數
我們通過案例來直觀的看下效果,我們配置循環次數為2,並運行腳本,運行結果如下所示:
我們從上圖可知,循環次數為2,每個接口調用了2次。比如有些業務,后端接口有做重復調用校驗的,就可以通過這種方式來驗證了。
無限循環
配置為無限循環的話,顧名思義,那肯定是一直會運行腳本,除非手動停止,腳本才會停止運行。
好了,今天的2種循環控制器就介紹到這里,綜上所述,如果用於參數化的話,大家肯定會使用ForEach Controller。2種控制器,各有功能,各取所需,希望對有需要的博友有所幫助。