JMeter:執(zhí)行順序與作用域
一、執(zhí)行順序
類似于運算符或操作符的優(yōu)先級,當JMeter測試中包含多個不同的元素時,哪些元素先執(zhí)行,哪些元素后執(zhí)行,并不是嚴格按照它們出現的先后順序依次有序執(zhí)行的,而是會遵循一定的內部規(guī)則,我們稱之為JMeter元素的執(zhí)行順序,一般情況下JMeter元素按照如下順序依次執(zhí)行:
0. 配置元件(Config Element)。
1. 前置處理器(Pre Processors)。
2. 定時器(Timer)。
3. 取樣器(Sampler)。
4. 后置處理器(Post Processors)。
5. 斷言(Assertions)。
6. 監(jiān)聽器(Listener)。
注意,只有取樣器結果不為空的情況下才會執(zhí)行4、5、6。
一個簡單的例子:
其中①為取樣器、②為配置元件、③為定時器、④為監(jiān)聽器、⑤為前置處理器、⑥為后置處理器、⑦為斷言。
執(zhí)行順序為:②-->⑤-->③-->①-->⑥-->⑦-->④。
二、組件作用域
JMeter測試樹元素分類
在JMeter的GUI界面,測試計劃就是一顆樹,Test Plan是樹的根節(jié)點,其他元素都是其子孫.從作用域的角度來看,測試樹中的元素可以分為兩大類:
1、具有層次結構的元素
- 這類元素的作用域與其所處的層次有關。
- 這類元素包括:配置元件,前置處理器,定時器,后置處理器,斷言,監(jiān)聽器這6大組件。
2、具有順序結構的元素
- 這類元素一般嚴格按照其出現的先后順序依次有序的執(zhí)行。
- 這類元素不會對其他元素的功能有影響,只是起控制作用,沒有作用域的概念。
- 這類元素包括取樣器與邏輯控制器。
另外,還有剩下的線程組比較特殊,線程組也不會影響其他元素的功能,但是線程組的執(zhí)行順序是可以配置的,若測試計劃下包含多個線程組,默認是并行執(zhí)行的,若要按照其出現的順序依次執(zhí)行,需要在測試計劃下勾選"Run Thread Groups consecutively (i.e. one at a time)"。
作用域
JMeter組件作用域指的是JMeter組件(配置元件,前置處理器,定時器,后置處理器,斷言,監(jiān)聽器)起作用的范圍,在此范圍內組件是有效的,可以影響取樣器的行為。
從前面的內容可以看出,JMeter作用域是針對組件而言的,只有層次結構的組件才有作用域的概念。
JMeter組件作用域規(guī)則
按照組件的父節(jié)點不同,組件的作用域有如下類型:
(1)取樣器作用域:
父節(jié)點為取樣器的組件具有的作用域,僅對該取樣器起作用。
(2)邏輯控制器作用域:
父節(jié)點為邏輯控制器的組件具有的作用域,對該邏輯控制器下的所有取樣器起作用。
(3)線程組作用域:
父節(jié)點為線程組的組件具有的作用域,對該線程組下的所有取樣器起作用。
(4)測試計劃作用域:
父節(jié)點為測試計劃的組件具有的作用域,對測試計劃下的所有取樣器起作用。
三、作用域案例說明
1、取樣器作用域
"Response Assertion_1"響應斷言,其父節(jié)點為"HTTP Resquest_baidu_1"取樣器,具有取樣器作用域,其作用域為該取樣器.所以此響應斷言只會斷言"HTTP Resquest_baidu_1",而不會斷言"HTTP Resquest_baidu_2"取樣器,如下圖示:
2、邏輯控制器作用域
"Response Assertion"響應斷言,其父節(jié)點為"Loop Controller1"邏輯控制器,具有邏輯控制器作用域,其對邏輯控制器下的所有取樣器起作用.所以該響應斷言會斷言"Loop Controller1"邏輯控制器下所有取樣器,包括"HTTP Request1","HTTP Request2"與"HTTP Request3",如下圖示:
3、線程組作用域
"Response Assertion"響應斷言,其父節(jié)點為"Thread Group"線程組,具有線程組作用域,其對線程組下的所有取樣器起作用.所以該響應斷言會斷言"Thread Group"線程組下所有取樣器,包括"HTTP Request1","HTTP Request2","HTTP Request3"與"HTTP Request4",如下圖示:
4、測試計劃作用域
"Response Assertion"響應斷言,其父節(jié)點為"Test Plan"測試計劃,具有測試計劃作用域,其對測試計劃下的所有取樣器起作用.所以該響應斷言會斷言"Test Plan"測試計劃下所有取樣器,包括"HTTP Request1","HTTP Request2","HTTP Request3","HTTP Request4","HTTP Request5"與"HTTP Request6",如下圖示: