JMeter使用邏輯控制器來決定采樣器的處理順序
- 簡單控制器(Simple Controller):存儲設備(將某些采樣器歸組)
- 循環控制器(Loop Controller:設置循環次數
- 僅一次控制器(Once Only Controller)
- 交替控制器(Interleave Controller)
- 隨機控制器(Random Controller)
- 隨機順序控制器(Random Order Controller): 每個子測試元件都至多執行一次,但是執行順序是隨機的
- 吞吐量控制器(Throughput Controller):容許用戶設定其被執行的頻率,這里有兩種模式:Percent Execution,該控制器會執行固定比例的循環次數(以測試計划總的循環次數為基准);Total Executions模式,該控制器會在執行數次(設定值)后停止執行。同僅一次控制器,當父循環控制器開始新一輪循環時,控制器的設定值會被重置。另外參數Per User選中,吞吐量控制器就會以虛擬用戶為基礎來計算它是否該執行,如果沒選,就是基於所有用戶來計算的。例如:Total Execution模式下,不勾選"per user”,設定值就是吞吐量控制器的總執行數,勾選,則是虛擬用戶數乘以Troughput設定值。
- 運行時長控制器(Runtime Controller):設定運行時長
- 如果控制器(If Controller):控制其下子測試元件是否執行,容許將腳本作為變量表達式處理(默認是JavaScript),判斷條件可以使用函數和變量,例如,${__jexl(${VAR}==23)}或者${COUNT} < 10或者${JMeterThread.last_sample_ok}檢查最后一個采樣是否成功, 如果選中“Interpret Condition as Variable Expression", 那么對應的表達式將會被計算,並與”true"比較,而不需使用JavaScript.注意:如果判斷條件以JavaScript方式解釋執行,那么腳本就無法訪問任何變量。如果要訪問變量,需勾選,並使用__javaScript()函數調用。如果在解釋執行代碼時發生錯誤,那么條件就被認定為false,並在jmeter.log記錄一條消息
- While Controller: conditon可能值
- Blank:當循環中有采樣失敗了后退出循環
- LAST:當循環中有采樣失敗了后退出循環,如果循環前最近的采樣失敗了,布進入循環
- Otherwise:當條件等同於字符串”false"時,退出(或者不進入)循環,舉個例子:
- ${VAR} --當VAR被其他測試元件設置為false
- ${__javaScript("${VAR2}"=="abcd")}
- ${_P(property)}--當屬性在其他地方被設置為"false"
- Switch Controller:switch value,選擇執行的子測試元件對應數字(或名稱)。子測試元件從0開始編號
- ForEach控制器(ForEach Controller):循環遍歷一系列相關變量,ForEach控制器非常適合於前置處理器正則表達式一起使用,前置處理器正則表達式可以從一個請求的結果數據中提取需要的輸入變量。通過省略“_"分隔符,ForEach 控制器使用輸入變量refName_g可以循環遍歷所有組合。使用refName_${C}_g格式的輸入變量還可以循環遍歷所有匹配的所有組合,其中C是一個計數器變量。
- 模塊控制器(Module Controller):提供了一個機制,即在當前測試計划中動態地替換測試計划判斷。不應該在遠程測試或者非GUI模式下雨工作件一起使用。
- Include Controller:使用外部JMX文件,將采樣器添加到簡單控制器之下,接着將簡單控制器保存為JMX文件。該文件接下來被用到測試計划中。被包含的測試計划中不能含有線程組。它只能是簡單控制器及其子元器件等。(Cookie Manager/User Defined Variables不應該在被包含文件中) ,該控制器在Filename域中不支持變量、函數,但是,如果定義了屬性includecontroller.prefix,其內容將作為路徑名前綴。
- 事務控制器(Transaction Controller) : 會產生一個額外的采樣,用於衡量執行嵌套測試所耗費的全部時間(包含了控制器范圍內的所有處理,不僅是采樣),有兩種操作模式 1)附加采樣在嵌套采樣之后添加 ;2)附加采樣作為嵌套采樣的父采樣來添加
- 錄制控制器