Jmeter——ForEach Controller&Loop Controller

溫一壺清酒發表於2020-11-05

今天來分享下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種控制器,各有功能,各取所需,希望對有需要的博友有所幫助。

相關文章