Jmeter工具使用--邏輯控制器Controller

一、Sampler Controller(簡單控制器)

作用:不會改變元件的運行順序,無實質性的作用,主要用來歸類和區分一些事務。比如登錄、退出等。

二、Once Only Controller(僅一次控制器)

作用:它下面的元件只會運行一次。即使Once only Controller是在循環控制器下面,也只會運行一次。

(1)

(2)
三、Loop Controller(循環控制器)

作用:功能擴展性不強,只能配置爲無限循環和具體循環次數,主要用於測試接口重複調用的情況(後端接口有做重複調用校驗的,就可以通過這種方式來驗證了。)。

四、ForEach Controller(循環控制器)

①通過在測試計劃中定義多個變量,通過ForEach遍歷;定義變量時遵循規則,一組變量的前綴一致;
②通過正則表達式提取器提取出多個值時,可通過ForEach遍歷後取到想要的值;
③通過請求數據庫,返回結果會以變量名_N進行存儲數據,N代表行,這樣剛好符合ForEach的輸入變量要求;
④通過Json提取器提取所有數據,返回的結果會以變量名_N存儲,同樣適用ForEach的變量輸入要求;

  • Input Variable Prefix:輸入變量前綴
  • Output variable name:輸出變量名稱
  • Start index for loop(exclusive):循環開始的索引(這裏如果不填寫,默認從1開始,如果沒有1開始的變量,執行時會報錯)
  • End index for loop(inclusive):循環結束的索引
  • Add””before number:輸入變量名稱中是否使用“”進行間隔。

定義一組全局變量,供ForEach Controller調用:

五、Transaction Controller(事物控制器)
  • Generate Parent Sample:如果選中,事務控制器將作爲其他取樣器的父級樣本,否則事務控制器僅作爲獨立的樣本
  • Include duration of timer and pre-post processors in generated sample:是否在生成的樣本中包括計時器,預處理和後處理的延遲時間

如果是一個很長的業務流程,最好還是要加上事物控制器,多個操作,放在一個事物控制器裏面,這樣方便腳本的編寫,不用勾選 【Generate parent sample】

如果對於多個接口的測試,有依賴相互關聯,或者是要測某一個連貫業務操作的性能情況,可以添加事物控制器,並且勾選 【Generate parent sample】

不勾選:Include duration of timer...,不將定時器時間統計在內

勾選:Include duration of timer...,將定時器時間統計在內

六、If Controller(條件控制器)

Expression (must evaluate to true or false) :表達式(值必須是true或false)
Interpret Condition as Variable Expression?:將條件解釋爲變量表達式,此項默認勾選
Evaluate for all children?:條件作用與每個子節點,默認不勾選,僅在If Controller入口處判斷一次
輸入框中不能直接填寫判斷條件的表達式,需要將利用__jexl3函數或__groovy函數將條件表達式求值計算爲true/false纔有效

步驟描述:添加自定義的變量值,利用ForEach Controller進行讀取此變量值,然後將讀取的變量值保存到設定的變量中;當變量取值符合IF Controller中設定的條件時,則執行其下的業務請求並監控

  • Add-->Config Element-->User Defined Variables
  • Add-->Logic Controller-->ForEach Controller
  • 在ForEach Controller下添加HTTP Request001,請求中配置引用讀取的參數

輸入框中表示ForEach Controller中讀取的變量值爲"002"時,纔會執行IF Controller之下的請求

我們還可以通過If Controller來實現混合場景壓力測試業務佔比:

(1)新增一個線程組並設置線程數及運行時間,40個線程組持續請求持續10秒。

(2)新增隨機變量,設置隨機範圍0~100,後續通過隨機變量在if控制器中配置接口業務佔比。

(3)新增3個如果(if)控制器,並設置接口業務佔比,表達式支持KaTeX parse error: Expected group after '' at position 2: {__jexl3({num}>=1&&${num}<=50,)}。
表達式支持:

==   是否等於,如${ __jexl3(${VAR}==1,)},判斷${VAR}變量是否等於1
!=  不等於,如${__jexl3(${VAR}!=1,)},判斷${VAR}變量是否不等於1
!  非,如${__jexl3(!(${VAR}!=1),)}對${VAR}!=1的結果取反
&&或||  且與或,如  ${__jexl3(${VAR}==1 && ${name} != "heima",)}
> 或者>==   大於等於,如${__jexl3(${count}>=10,)}

(4)新增聚合報告查看執行結果,接口001,接口002,接口003請求比例大約是5:3:2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章