全面jmeter邏輯控制器案例詳解
邏輯控制器作用:
(1)控制測試計劃或者執行緒組中節點的邏輯執行順序。
(2)對測試計劃或者執行緒組中的指令碼進行分組、方便jmeter統計執行結果以及指令碼執行時的控制等。jmeter中邏輯控制器(Logic Controllers)的作用域只對其子節點的sampler有效,作用是控制取樣器的執行順序。
一、簡單控制器(Simple Controller)
簡單控制器,顧名思義就是功能比較簡單,可以理解為一個資料夾,或起到分組作用。在指令碼眾多的時候,可以定義多個簡單控制,分別存放不同的指令碼請求。
二、迴圈控制器(Loop Controller)
作用:指定其子節點執行的次數,可以使用具體的數值,也可以使用變數。
1、Forever選項:勾選上這一項表示一直迴圈下去
2、如果同時設定了執行緒組的迴圈次數和迴圈控制器的迴圈次數,那迴圈控制器的子節點執行的次數為兩個數值相乘的結果。
執行緒組併發數設定2,迴圈次數2次,迴圈控制器設定迴圈3次,則一共執行2×2×3=12次;
三、僅一次控制器:
僅一次控制器,在迴圈執行中對該控制器下的請求進行執行一次,然後在接下來的迴圈執行中將會跳過該控制器下的所有請求。
在進行登入的測試中,可以考慮將登入請求放在僅一次控制中,這樣登入請求只執行一次。在併發查詢時,可能會使用到僅一次控制器,在併發查詢時,我們只需要登入請求執行一次即可。Jmeter中的僅一次控制器相當於loadrunner中的init的初始化action。
執行緒數設定迴圈3次
樓清介面不在控制器內,會執行3次,而灰漿介面執行1次;
四、隨機控制器
執行緒組迴圈設定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
七、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、事務下有多個取樣器,其中一個取樣器請求失敗,這個事務就失敗了
十三、 吞吐量控制器
1、介紹
吞吐量控制器(Throughput Controller)用來控制其下元件的執行次數,並無控制吞吐量的功能。
作用:控制其下的子節點的執行次數與負載比例分配;
吞吐量控制器欄位介紹:
Total Executions:執行百分比(1-100)
percent Executions:執行數量
Per User:執行緒數,當選Total Executions時,是執行緒數;當選percent Executions時,是執行緒數*迴圈次數
2、新增吞吐量控制器(執行緒組-邏輯控制器-吞吐量控制器)
3、場景實戰
場景一:選Total Executions,設定吞吐量數量
執行緒組-執行緒數4,迴圈次數2;灰漿吞吐量控制器設定-選Total Executions,吞吐量5;樓清吞吐量控制器設定-選Total Executions,吞吐量9
分析:整個執行緒組會執行4×2=8個,灰漿執行5個,樓清設定9是超過最大值8,所以會執行最大值8;
檢視結果,灰漿5個,樓清8個
場景二:選percent Executions,設定比例
執行緒組-執行緒數5,迴圈次數2;灰漿吞吐量控制器設定-選percent Executions,吞吐量30;樓清吞吐量控制器設定-選percent Executions,吞吐量70
分析:匯流排程組會執行5×2=10個,灰漿佔比30%,執行3個;樓清佔比70%,執行7個
檢視結果:灰漿執行3個,樓清執行7個
場景三:選Total Executions,吞吐量不填,勾選Per User,執行數=執行緒數
1、執行緒組-執行緒數5,迴圈次數2;灰漿吞吐量控制器設定-選percent Executions,吞吐量30;樓清吞吐量控制器設定-選Total Executions,吞吐量不填,勾選Per User
分析:則灰漿執行3個,樓清執行執行緒數5個
場景四:選percent Executions,吞吐量不填,勾選Per User,執行數=執行緒數*迴圈次數
執行緒組-執行緒數5,迴圈次數2;灰漿吞吐量控制器設定-選percent Executions,吞吐量30;樓清吞吐量控制器設定-選percent Executions,吞吐量不填,勾選Per User
分析:則灰漿執行3個,樓清執行執行緒數10個