JMeter(二十六)邏輯控制器

JMeter中的Logic Controller用于為Test Plan中的節點添加邏輯控制器。

JMeter中的Logic Controller分為兩類:一類用來控制Test Plan執行過程中節點的邏輯執行順序,如:Loop Controller、If Controller等;另一類則與節點邏輯執行順序無關,用于對Test Plan中的腳本進行分組、方便JMeter統計執行結果以及進行腳本的運行時控制等,如:Throughput Controller、Transaction Controller。

一、控制Test Plan中的節點執行順序的Logic Controller

1、ForEach Controller:類似于編程語言中的for each語句。如下圖:

通常情況下,ForEach Controller常與Regular Expression Extractor配合使用。

2、If Controller:類似于編程語言中的if語句,根據給定表達式的值決定是否執行該節點下的子節點。如下圖:

注意:條件判斷語句如果是字符串一點要在參數前加引號,如:a."${foreach_city}"=="beijing" b."${foreach_city}"!="beijing"

如果選中“Evaluate for all Children”選項,則該Controller在每個子節點執行時執行一次,否則,該Controller僅在入口執行一次。

3、Interleave Controller:在每次迭代時,順序選取該節點下的一個子節點執行。如下圖:

如果選中“Ignore sub-controller blocks”選項,則該Controller將其下的子Controller當成單一元素處理,并僅允許每個子Controller一次發出一個請求。

在該示例中,設置迭代次數為4次,節點的執行順序是:Req1-HTTP Request –Req2—HTTP Request—Req3—HTTP Request.

4、Loop Controller:簡單地為其下的子節點運行指定次數。如下圖:

5、Once Only Controller:是為了讓Test Plan中的某些內容在整個Test Plan的執行期間對每個線程僅執行一次(例如,每個線程僅需要執行一次“登錄”操作)。如:將Once Only Controller作為Loop Controller的子節點,Once Only Controller在每次循環的第一次迭代時均會被執行。如下圖:

6、Random Controller:每次執行時,從其子節點中隨機選取一個來執行。如下圖:

7、Random Order Controller:每次執行時,按照隨機產生的順序執行其下的所有子節點。注意,該Controller與Random Controller的不同之處在于,Random Controller只選擇執行其所有子節點中的一個,而Random Order Controller則按照隨機順序全部執行該Controller下的所有子節點。

8、Switch Controller:類似程序語言中的switch函數,該Controller根據給定的值n(可以使用參數)選擇執行其下的第n+1個子節點。如下圖:

需要注意的是,Switch Controller只接受整數值,并且給定的值n是以0為基礎的,因此當給定的值“2”時,意味著該Controller下的第3個子節點會被執行。同時,Switch Controller接受參數作為其值。

9、While Controller:是另一個用于控制循環的Controller。可以為該Controller設置一個Condition.Condition的取值可以為以下三者之一:

空:如果Condition取值為空,則該Condition迭代執行

Controller下的所有子節點,直到最后一個子節點返回失敗為止。需要注意的是,如果不是最后一個子節點失敗,而是該Controller中的其他

子節點失敗,該Controller不會停止,而會繼續循環執行過程。

LAST:如果Condition取值為字符串LAST,則該

Controller迭代執行Controller下的所有子節點,直到最后一個子節點返回失敗為止(與Controller為空時的行為相同)。同時,

如果該Controller的上一個節點失敗,則Test Plan在執行時不會進入該Controlller。

表達式:除了為空和LAST外,Controller還可以取一個表達式。當Controller取值為表達式時,如果表達式的取值是字符串false,While Controller就退出循環。以下列出了幾個可用的表達式:

${VAR}:當參數VAR的值被設置成false時退出循環。

${__javascript(“${VAR}”==”dennis”)}:當參數VAR的值不為dennis時退出循環。

${_P(myproperty)}:當屬性myproperty的取值為false時退出循環。

二、其它Logic Controller

除了以上的9種Logic Controller外,JMeter還支持其他7種Logic Controller.

1、Include Controller:用于在Test Plan中包含一個外部的jmx文件。

在Test Plan運行時,被包含的jmx文件中測試計劃中不能有線程組,只允許有一個Simple Controller和該Simple Controller下的子節點(可添加任何采樣器,控制器),不允許有Cookie Manager、User Defined Variable等。

如果用戶需要使用Cookie Manager或者?用戶自定義變量,都應該在頂層的測試計劃中設置,不應該包含在外部文件中,否則不會它們不會起作用。

注意:被包含文件中的Simple Controller及其子節點將會替換Test Plan中的Include Controller.

外部jmx文件結構圖:

主測試計劃圖:

2、Simple Controller:如同該Controller的名稱,是JMeter中最簡單的一個Controller。該Controller僅用于對Test Plan中的元件進行分組,不具有任何的邏輯控制或運行時的功能。

3、Module Controller:為Test Plan提供了在運行時動態執行給定的Test Plan片段的能力。如下圖:

從圖中可以看出,無論是放在本Thread Group、其他的Thread Group,或是WorkBench下的Test Plan片段,都可以在Module Controller中被調用。

4、Runtime Controller:用于指定其子節點的運行時長。該Controller中指定的時間以秒為單位,僅對該Controller的子節點有效。

5、Throughput Controller:用于控制其下的子節點的執行次數與負載比例分配的。

Throughput Controller允許用戶使用兩種模式控制其下子節點的執行順序:比例模式和總數模式。總數模式指定該Controller下所有子節點的準確迭代次數,而比例模式允許負載在Controller下的子節點以某種比例進行分配。在比例模式下,設定的Throughput值為一個0-100之間的整數,表示該Controller迭代次數占總迭代次數的百分比。

可能你已經意識到,如果要在一個Test Plan中體現用戶場景,Throughput Controller應該是最合適的選擇。

圖A給出了總數模式下的Throughput

Controller,在這種模式下,每個線程最多運行Java

Request10次(具體的運行次數還取決于線程組中線程數和迭代次數的設置,如果設定的Total

Execution的次數大于線程組中設置的迭代次數,每個線程最多運行線程組中設定的迭代次數)。

圖B給出了比例模式下的Throughput

Controller,從圖中可以看出,該Test Plan包含了兩個Throughput

Controller,第一個設定的Percentage為70,也就是70%,第二個設定的Percentage為30,也就是30%。線程組的線程數

設置為10,迭代次數也設置為10.在這種模式下,req1被運行70次,req2被運行30次。如下圖:

6、Transaction Controller:用于將Test Plan中的特定部分組織成一個Transaction,JMeter中Transaction的作用在于,可以針對Transaction統計其響應時間、吞吐量等。

在有些情況下,一個用戶操作可能需要多個Sampler來模擬,此時,使用Transaction Controller,可以更準確地得到該用戶操作的性能指標,如響應時間等。

7、Recording Controller:唯一的用途是用于存放JMeter錄制得到的腳本。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容