在jmeter中邏輯控制器可以控制采樣器(samplers)的執行順序。由此可知,控制器需要和采樣器一起使用,否則控制器就沒有什麼意義了。放在控制器下面的所有的采樣器都會當做一個整體,執行時也會一起被執行。
(1)控制測試計劃或者線程組中節點的邏輯執行順序。
(2)對測試計劃或者線程組中的腳本進行分組、友善jmeter統計執行結果以及腳本運作時的控制等。
jmeter中邏輯控制器(Logic Controllers)的作用域隻對其子節點的sampler有效,作用是控制采樣器的執行順序。
測試計劃—線程組—邏輯控制器
一、簡單控制器(Simple Controller):
從下圖看出監聽器生效于控制器内的所有采樣器,有多個簡單控制器時,采樣器按順序執行
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL5NmaNlXQU5kMNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmL2cTO4IjN0kDM4IjMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
二、循環控制器(Loop Controller):
作用:指定其子節點運作的次數,可以使用具體的數值,也可以使用變量
1、Forever選項:勾選上這一項表示一直循環下去
2、如果同時設定了線程組的循環次數和循環控制器的循環次數,那循環控制器的子節點運作的次數為兩個數值相乘的結果。
循環控制器1設定循環3次,循環控制器2設定循環2次,線程組1循環次數1時:
HTTP請求3未處于循環控制器下,故隻執行1次
循環控制器1設定循環3次,循環控制器2設定循環2次,線程組1循環次數2時:
先循環控制器2 2次,再循環控制器1 3次,再線程1循環2次
三、僅一次控制器:
僅一次控制器,在循環執行中對該控制器下的請求進行執行一次,然後在接下來的循環執行中将會跳過該控制器下的所有請求。
在進行登入的測試中,可以考慮将登入請求放在僅一次控制中,這樣登入請求隻執行一次。在并發查詢時,可能會使用到僅一次控制器,在并發查詢時,我們隻需要登入請求執行一次即可。Jmeter中的僅一次控制器相當于loadrunner中的init的初始化action。
線程循環設定5
HTTP請求2不在控制器内
四:随機控制器
随機控制器下的sampler添加3個
線程組循環設定1時,每運作一次會随機地運作1個sampler
線程組循環設定2時,每運作一次會随機地運作2個sampler
五、随機順序控制器
随機順序控制器下的sampler添加3個
随機順序控制器執行一次,會随機打亂執行它下面的所有的sampler一次
線程組循環設定1時,每運作1次會運作3個sampler,順序打亂随機
線程組循環設定2時,每運作1次會運作3個sampler,循環2次,共計6個sampler,順序打亂随機
六、交替控制器
循環控制器(設定循環7次)——交替控制器,下面添加3個sampler
循環時順序疊代交替控制器下的sampler
線程組1循環設定1次,循環控制器設定7次,順序循環7次sampler 1231231
線程組1循環設定2次,循環控制器設定7次,順序循環7次sampler ,再循環線程的2輪
七、Runtime控制器
Runtime(seconds):設定為N,則其下所有節點的運作時間為N秒。其下所有節點,跑完一輪,耗費時間小于N秒,此時,再從頭執行一邊,直到執行時間等于N,跳出控制器。
八、如果(If)控制器
if控制器條件滿足,執行控制器下的Sampler;不滿足、不填寫條件,則不執行
1.Interpret Condition as Variable Expression?:這個選項勾選了之後,條件中,如果寫“${a}" == "${b}”(及時變量a和變量b的值相等,也不會執行)。這個地方,就必須要填寫一個傳回True的表達式,比如${JMeterThread.last_sample_ok},這樣的表達式。
2.Evaluate for all children:假如這個控制器下面,有3個HTTP請求。如果需要在執行每個HTTP請求前,進行判斷是否滿足控制器中的條件,則需要勾選該複選框。
debug Sampler 響應資料 JMeterThread.last_sample_ok=true
條件設定為${JMeterThread.last_sample_ok},這是判斷boolean類型,true執行,false不執行
條件設定為"${JMeterThread.last_sample_ok}"=="AAA",成立執行,不成立不執行
九、While控制器
執行該控制器下所有節點,直到它的條件被判斷為false,才會跳出控制器,執行後續sampler
1、哪些條件會導緻While Controller控制器跳出循環退出?
成功的sampler在前面 失敗的sampler在後面 執行到fail會跳出循環
條件中的方法或者變量為false Condition ${BooleanValue}
條件不滿足了 Condition "${BooleanValue}"=="AAA"
這個控制器下的sampler執行結果失敗
2、哪些條件會導緻While Controller控制器下sampler一直循環執行?
Condition什麼都不寫(會一直循環執行 知道執行到有fail跳出循環)
失敗的sampler在前面 成功的sampler在後面 這種情況會一直執行死循環
Condition寫LAST(會一直循環執行 知道執行到有fail跳出循環)Condition LAST
十、While控制器
Switch Value可以填什麼?
1.什麼都不填寫:此時,執行第一個節點
2.填寫數字:填寫N,則會執行這個控制器下面的第N+1個Sampler
3.填寫字元:會進行sampler名稱字元串全比對 填寫 sampler名稱全比對
十一、周遊循環控制器ForEach 控制器
作用:ForEach控制器一般和使用者自定義變量一起使用,其在使用者自定義變量中讀取一系列相關的變量。該控制器下的采樣器或控制器都會被執行一次或多次,每次讀取不同的變量值(多個變量執行多次)
示例:1、建立不同權限的使用者,賬号用随機變量建立,類型0和1用自定義變量
輸入變量字首:在其中輸入需要周遊的使用者參數(User Parameter)
Start index for loop(exclusive):循環指數開始(唯一)→ 周遊查詢的變量範圍,開始的值(這裡如果不填寫,預設從1開始,如果沒有1開始的變量,執行時會報錯)
End index for loop(inclusive):循環指數結束(包含)→ 周遊查詢的變量範圍,結束的值
輸出變量名稱:将周遊查詢到的符合條件的使用者參數指派給輸入變量(Vname),然後就可以在控制器下的取樣器使用,格式為${輸出變量名}
Add”_”before number:輸入變量名稱中是否使用“_”進行間隔
PS:這個控制器一般配合配置元件→ 正規表達式提取器來一起使用,可對頁面上的某些元素進行重複處理。
十二、事務 控制器
作用:事務控制器會生産一個額外的采樣器,用來統計該控制器子結點的所有時間。
應用場景: 完成一個完整的頁面請求或一組請求或一組測試場景(多線程時是順序執行的)
參數:
- Generate parent sample:勾選後,所有的結果将在父結點中展示(選中這個參數結果展示如下圖紅框,否則顯示為下圖藍框)
- Include duration of timer and pre-post processors in generated sample:選中這一項會統計定時器(timer)的時間,否則隻統計采樣器(sample)的時間
1、事務下有多個取樣器,其中一個取樣器請求失敗,這個事務就失敗了
十三、吞吐量控制器throughput controller
待續————————————————————————————————