# jmeter邏輯控制器
jmeter中邏輯控制器(Logic Controllers)的作用域只對其子節點的sampler有效,作用是控制采樣器的執行順序。
jmeter提供了17種邏輯控制器,它們各個功能都不盡相同,大概可以分為2種使用類型:
①.控制測試計劃執行過程中節點的邏輯執行順序,如:Loop Controller(循環控制器)、If Controller(如果if控制器)等;
②.對測試計劃中的腳本進行分組,方便JMeter統計執行結果以及進行腳本的運行時控制等,如:Throughput Controller(吞吐量控制器)、Transaction Controller(事務控制器)等
jmeter提供如下17種邏輯控制器:

**一、臨界區控制器**(critical section Controller)
作用:臨界區控制器確保其子節點下的取樣器或控制器將被執行(只有一個線程作為一個鎖)

名稱和注釋很簡單,就是給控制器添加一個備注,使人明白這個控制器的解釋含義的意思
**Lock name:**鎖名稱,這里可以填入其子節點下執行的線程的名稱,這個線程作為一個全局鎖存在
**2、遍歷循環控制器**(ForEach Controller)
作用:用來遍歷當前元素的所有可執行場景;在用戶自定義變量中讀取一系列相關的變量,該控制器下的采樣器或控制器都會被執行一次或多次,每次讀取不同的變量值;

**輸入變量前綴:**在其中輸入需要遍歷的用戶參數(User Parameter)
**Start index for loop(exclusive):**循環指數開始(唯一)→ 遍歷查詢的變量范圍,開始的值(這里如果不填寫,默認從1開始,如果沒有1開始的變量,執行時會報錯)
**End index for loop(inclusive):**循環指數結束(包含)→ 遍歷查詢的變量范圍,結束的值
**輸出變量名稱:**將遍歷查詢到的符合條件的用戶參數賦值給輸入變量(Vname),然后就可以在控制器下的取樣器使用,格式為${輸出變量名}
**Add”****\_”****before number:**輸入變量名稱中是否使用“\_”進行間隔
**PS:**這個控制器一般配合配置元件→ 正則表達式提取器來一起使用,可對頁面上的某些元素進行重復處理。
**3、包含控制器**(Include Controller)
作用:用于引用外部的Jmx文件;從而控制多個測試計劃組合

**include Test Plan:**包含測試計劃的文件名,可以點擊瀏覽,從文件夾保存的JMX文件夾目錄下選擇對應的JMX文件
**使用方法:**創建一個測試計劃,下面可添加取樣器/控制器等,然后保存測試計劃,為了方便起見,?線程組也可以添加外部JMX文件中用于調試;
如果測試使用Cookie或用戶定義的變量,這些應放置在頂層(包括文件),否則無法正常工作;此元素不支持變量/函數在文件名字段中;但是,如果屬于包含控制器定義的內容,則使用前綴路徑名。
當使用包含控制器中包含相同的JMX文件,則要確保文件名不同,以避免無法讀取;如果文件不能被發現,那么控制器會嘗試打開文件名相對于JMX啟動目錄。
**4、生命周期/運行周期控制器**(Runtime Controller)
作用:用于控制該控制器下的取樣器/控制器的運行時間

**Runtime(seconds):**運行時間,單位為:秒
**5、轉換控制器**(Switch Controller)
作用:通過給該控制器中的value賦值,來指定運行哪個取樣器(也可以理解為開關控制器)

**Switch value:**控制器具體賦值的value值字段
有兩種賦值方式:
①.第一種是數值,Switch控制器下的子節點從0開始計數,通過指定子節點所在的數值來確定執行哪個元素。
②.第二種是直接指定子元素的名稱,比如采樣器的Name來進行匹配。當指定的名稱不存在時,不執行任何元素。
當Value為空時,默認執行第1個子節點元素。
**6、當/判斷控制器**(While Controller)
?作用:運行其子節點下的取樣器/控制器,直到條件為“假”

**Condition(function or variable):**條件(函數或變量):里面可填入判斷依據的條件,參照
使用方法:可能的條件值有:
①.空白:最后一個示例循環失敗時退出循環
②.最后一個值:最后一個示例循環失敗時退出循環。 如果之前的最后一個示例只是循環失敗,不進入循環。
③.否則:退出時(或不輸入)循環條件等于字符串“?假?”
條件可以是任何變量或函數,最終等于字符串”?假?”。需要注意的是:條件是評估兩次,一次取樣前,一次隨機取樣
**7、事務控制器**(transaction controller)
作用:生成一個額外的采樣器來測量其下測試元素的總體時間;值得注意的是,這個時間包含該控制器范圍內的所有處理時間,而不僅僅是采樣器的

**Generate parent sample:**生成父樣本(不同的模式選擇)
**include duration of timer and pre-post processors in generated sample:**包含時間的計時器和前后處理器生成的示例(不同的模式選擇)
對于Jmeter2.3以上的版本,有兩種模式的操作
①.事務采樣器是添加到其下采樣器后面的
②.事務采樣器是作為其下采樣器的父采樣器
生成的事務采樣器的測量的時間包括其下采樣器以及其他的一切時間。由于時鐘頻率問題,這個時間可能略大于單個采樣器的時間之和;
時鐘開始時間介于控制器記錄開始時間與第一個采樣器開始之間,時鐘結束時間亦然。
事務采樣器只有在其子采樣器都成功的情況下才顯示成功。
在父模式下,事務控制器下的各個采樣器只有在結果樹里才能看到;同時,子采樣器的數據也不會在CSV文件中顯示,但是在XML文件中可以看到。
**8、交替控制器(creatleave controller)**
作用:?交替控制,使得該控制器包含的取樣器步驟交錯執行在每個循環中

**忽略子控制器模塊**(Ignore sub-contorller blocks):如果勾選此項,交錯控制器將sub-controllers像單一請求元素一樣,一次只允許一個請求/控制器
使用方法:假使該控制器下有2個取樣器A和B,交替執行A和B2個請求,即每次傳遞一個子請求到這個測試,按子元件的排列順序
**9、僅一次控制器**(once only controller)
作用:在多線程循環的時候,將使其子節點下的取樣器請求只運行一次

**10、流量控制器**(throughput controller)
作用:jmeter自帶的翻譯這里是錯誤的,因為它并不能控制吞吐量;其實質作用是允許用戶控制執行的頻率

總共有兩種執行模式:百分比執行和總執行
**總執行**(Total Executions):使控制器停止執行一定數量的測試計劃
**百分比執行**(Percent Executions):使控制器按一定比例執行迭代的測試計劃
**流量**(Throughput):對應上面的執行數量或者比例
**每個用戶**(Per User):每個用戶
如果勾選此項,將導致控制器計算是否應該執行在每個用戶(每個線程)的基礎上;如果不加以控制,那么將計算所有用戶
**11、IF控制器**(If Controller)
作用:允許用戶控制該控制器下面的取樣器/控制器是否執行該節點下的子節點;

**條件(默認JavaScript)(**Condition(default javascript)**)**:使用JavaScript的函數或變量進行評估判斷條件為真或假
**條件解釋為變量表達式**(interpret condition as variable expression):如果勾選該項,那么變量表達式會進行求值,并與“ture”或“false”進行比較,而無需使用JavaScript
**對所有子條件執行**(evaluate for all children):如果勾選該項,則該controller在沒一個子節點執行時執行一次;
默認情況下,該控制器可以對包含在其下面的所有可運行的元素進行執行,但只在入口執行一次
12、**錄制控制器**(Recording Controller)
作用:類似代理服務器的作用,在測試執行期間記錄測試樣本

**清除所有記錄的樣本**(Clear all the recorded samples):點擊可以清除所有已經記錄的測試樣本
一般情況下,在測試執行時候,它沒有效果,但是在執行HTTPS測試腳本時,會記錄下所有測試樣本
**13、循環控制器**(Loop Controller)
作用:該控制器下的取樣器請求可以循環運行

**循環次數**(Loop Count):在輸入框中輸入需要循環的次數,控制器下的請求即可循環運行
**永遠**(forever):如果勾選該項,那么控制器下的請求可一直運行
14、**模塊控制器**(Module Controller)
作用:測試控制器子節點下的某一個模塊,而不是整個測試計劃
?
**尋找目標元素**(Find target element):尋找測試計劃中需要特定測試的元素,模塊;也可理解為該控制器可以控制已經封裝好的模塊元素
**△ :**一個測試計劃由一個控制器和所有的測試元素(取樣器等)組成,測試計劃可以位于任何線程組或工作臺;如果計劃位于線程組,則可以禁用其他控制器,防止正在運行的測試計劃被影響(除了模塊控制器)
? ? ?模塊控制器的優勢在于:當存在多個線程組時,該控制器可以輕松切換,只需要選擇對應的取樣器,方便快捷,替代了創建很多測試計劃的繁瑣操作
**△ :**任何一個模塊所用的控制器名字必須唯一,因為其名字被用來找到目標控制器時重新加載;出于這個原因,最好保證控制器名字不同,否則執行測試時候可能發生意外
**△ :**模塊控制器與遠程測試不應使用或非gui測試與工作臺部件,因為工作臺測試元素并沒有測試計劃的一部分?jmx?文件。 任何這樣的測試就會失敗
15、**簡單控制器**(Simple Controller)
?作用:用來組合取樣器和其他邏輯控制器

簡單控制器是最基本的控制器,對jmeter測試運行沒有任何影響,可用來命名某些操作
16、**隨機控制器**(Random Controller)
作用:類似交替控制器,但該控制器隨機選取某一個取樣器請求并執行

**忽略子控制器模塊**(Ignore sub-controller blocks):如果勾選此項,交錯控制器將sub-controllers像單一請求元素一樣,一次只允許一個請求/控制器
17、**隨機順序控制器**(Random Order Controller)
作用:類似于簡單控制器,將執行每個子節點下的取樣器請求一次,但是執行是隨機的

- 接口測試
- 5.1 postman 接口測試簡介
- 5.2 postman 安裝
- 5.3 postman 創建請求及發送請求
- 5.4 postman 菜單及設置
- 5.5 postman New菜單功能介紹
- 5.6 postman 常用的斷言
- 5.7 請求前腳本
- 5.8 fiddler網絡基礎及fiddler簡介
- 5.9 fiddler原理及使用
- 5.10 fiddler 實例
- 5.11 Ant 介紹
- 5.12 Ant 環境搭建
- 5.13 Jmeter 簡介
- 5.14 Jmeter 環境搭建
- 5.15 jmeter 初識
- 5.16 jmeter SOAP/XML-RPC Request
- 5.17 jmeter HTTP請求
- 5.18 jmeter JDBC Request
- 5.19 jmeter元件的作用域與執行順序
- 5.20 jmeter 定時器
- 5.21 jmeter 斷言
- 5.22 jmeter 邏輯控制器
- 5.23 jmeter 常用函數
- 5.24 soapUI概述
- 5.25 SoapUI 斷言
- 5.26 soapUI數據源及參數化
- 5.27 SoapUI模擬REST MockService
- 5.28 Jenkins的部署與配置
- 5.29 Jmeter+Ant+Jenkins 搭建
- 5.30 jmeter腳本錄制
- 5.31 badboy常見的問題