『動善時』JMeter基礎 — 40、JMeter中ForEach控制器詳解


1、什么是邏輯控制器

JMeter官網對邏輯控制器的解釋是:“Logic Controllers determine the order in which Samplers are processed.”

意思是說,邏輯控制器可以控制采樣器(Samplers)的執行順序。

由此可知,控制器需要和采樣器一起使用,否則控制器就沒有什么意義了。放在控制器下面的所有采樣器,都會當做一個整體,執行時也會一起被執行。

JMeter提供了多種邏輯控制器,它們各個功能都不相同,大概可以分為兩種使用類型:

  • 控制測試計划執行過程中,節點的邏輯執行順序,如:ForEach Controller(ForEach控制器),Loop Controller(循環控制器)、If Controller(如果if控制器)等;
  • 對測試計划中的腳本進行分組,方便JMeter統計執行結果,以及進行腳本的運行時控制等,如:Throughput Controller(吞吐量控制器)、Transaction Controller(事務控制器)等。

2、ForEach控制器介紹

ForEach控制器一般和用戶自定義變量一起使用,從用戶自定義變量中讀取一系列相關的變量。

ForEach控制器遍歷讀取不同的變量值,來控制其下的采樣器或控制器執行一次或多次。

說明:

  1. 從上文中看到了一組數據,就說明這樣的數據,通常為一個數組。
  2. 可以使用ForEach控制器遍歷循環,說明這組數據有一定的規范和順序標識。
  3. 看到用戶自定義變量,就說明也可以用到參數化,從數據文件中讀取數據。同理也可以從之前的請求接口中提取到需要的數據,進行遍歷循環。

添加ForEach控制器組件操作:選中“線程組”右鍵 —> 添加 —> 邏輯控制器 —> ForEach控制器

界面如下圖所示:

image

ForEach控制器組件界面說明:

  • 名稱ForEach控制器組件的自定義名稱,見名知意最好。
  • 注釋:即添加一些備注信息,對該ForEach控制器組件的簡短說明,以便后期回顧時查看。
  • 輸入變量前綴:輸入需要遍歷的這一組數據的前綴,例如:appid_1appid_2,則appid就是前綴。
    提示:包括用戶自定義變量,或者是參數化文件中的數據都要這樣命名才能遍歷。
  • 開始循環字段(不包含):循環的起始位置,如填0,實際是從第一個開始。默認為空也可。(親測可以)
  • 結束循環字段(含):循環結束的位置,如填4,實際第4個不會被使用,只會到第3個。默認為空也可以,程序會循環執行到最后一個變量,再停止。(親測可以)
  • Add "_" before number ?: 是否在上面輸入的變量后增長下划線“_”。例如不勾選此項,變量為appid1, appid2...以此類推。勾選此項后,變量名變為appid_1, appid_2...以此類推。
    默認為勾選,默認的最好不要動,按照上面的變量名整理數據就好。在日常工作中,看准備數據的情況,來決定是否取消勾選。

3、ForEach控制器的使用

我們以一個學院系統為例,完成以下步驟:

  1. 先查詢出所有學院的列表。
  2. 把列表中的學院ID都提取出來,也就是得到我們需要一組數據。
  3. 然后使用ForEach控制器,循環遍歷這些數據。
  4. 從而根據每個學院ID,單獨查看學院的信息。

(1)測試計划內包含的元件

添加元件操作步驟

  1. 創建測試計划。
  2. 創建線程組:選中“測試計划”右鍵 —> 添加 —> 線程(用戶) —> 線程組
  3. 在線程組中,添加取樣器”HTTP請求“組件:選中“線程組”右鍵 —> 添加 —> 取樣器 —> HTTP請求
  4. 在取樣器中,添加后置處理器“JSON提取器”組件:選中“取樣器”右鍵 —> 添加 —> 后置處理器 —> JSON提取器
  5. 在線程組中,添加邏輯控制器“ForEach控制器”組件:選中“線程組”右鍵 —> 添加 —> 邏輯控制器 —> ForEach控制器
  6. 在邏輯控制器中,添加取樣器“HTTP請求”組件:選中“邏輯控制器”右鍵 —> 添加 —> 取樣器 —> HTTP請求
  7. 在線程組中,添加監聽器“察看結果樹”組件:選中“線程組”右鍵 —> 添加 —> 監聽器 —> 察看結果樹

最終測試計划中的元件如下:

image

點擊運行按鈕,會提示你先保存該腳本,腳本保存完成后會直接自動運行該腳本。

(2)獲取學院列表請求內容

標准的Get請求,填寫請求的基本要素即可。

如下圖所示:

image

返回的數據為JSON格式的數據,如下圖:

image

(3)JSON提取器內容

JSON提取器需要做的就是把每個學院的ID提取出來,存放到線程變量中,然后提供給后邊的請求使用。

編輯內容如下:

我們把變量的名字定義為depid,這樣提取出來的變量名就會變為depid_1depid_2,以此類推。

然后使用 JSON PATH 表達式來,提取我們需要的數據。

最后填寫-1,表示保存所有提取到的值,0表示隨機保存一個提取到的值。

如下圖所示:

image

當然我們也可以使用正則表達式提取器組件來提取我們需要的數據,結果是一樣的。

如下圖所示:

image

最后我們可以使用Debug Sampler組件,來查看我們提取的值,是否保存在線程變量中了。

如下圖所示:

image

(4)ForEach控制器內容

ForEach控制器中所編寫的內容:

  1. 輸入變量前綴:就是我們上圖中,存在線程變量中數據名稱的統一前綴,為depid
  2. 在哪個變量開始遍歷循環:0表示從第一個變量開始,因為不包含開頭,也就是從depid_1變量開始。也可以默認不填寫(親測可以,但最好還是寫上)。
  3. 在哪個變量停止遍歷循環:一共有6個變量,因為包含結尾,所以填寫6。也可以默認不填寫(親測可以,但最好還是寫上)。
  4. 輸出變量名稱:也就是在其他的請求中,可引用這個變量的名字,我就定義為dep_id

如下圖所示:

image

(5)查看學院請求內容

也是一個標准的Get請求,只需要填寫請求的基本信息即可。

然后我們再需要引入數據的地方,進行參數化變量的引用。

因為該請求在ForEach控制器的控制下,所以ForEach控制器每次遍歷循環得到的學院ID,都傳送到請求里的dep_id變量中,這樣就能查看對應的學院信息了。

如下圖所示:

image

(5)查看結果

運行腳本,查看結果,如下圖所示:

image

從上圖中我們可以看到,通過每個學院的ID,單獨查看了自己學院的信息。

這樣我們就完成了,介紹ForEach控制器是如何使用的。

提示:關於其他的控制器,我們以后用到,在詳解的進行說明。


免責聲明!

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



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