【蟲師--系列】JMeter基礎之--元件的作用域與執行順序
來自: http://www.cnblogs.com/fnng/archive/2012/12/27/2836506.html 作者:蟲師
前面有介紹過jmeter的元件類別,對於新手來說,jmeter的元件是還是不少的,如果我們按照每一個元件的每一個引數的含義去學習,無疑會降低學習效能測試的熱情,就算我們熟悉了所有元件以及元件上的引數了,我們也不知道如何將其組合成我們想要描述的效能測試。另一方面,我們點選每個節點上的元件都會出現類似或相同的選單,他們的層級關係是什麼樣的。究竟這個元件放在哪個層級的哪個位置才達到我們意願。
如何更快速的入門jmeter,個人建議通過錄制指令碼的方式,快速的瞭解一個性能測試應該包括的元件以及它們的層級關係。
如下,我通過badboy工具錄製的一個指令碼(指令碼過程:登入126郵箱,給自己發一封郵件,祝自己聖誕快樂!),並可以方便的將指令碼匯出為jmx格式,這也是jmeter指令碼的格式,所以可以被jmeter識別並匯入。
指令碼匯入到jmeter後,我添加了兩個監聽器(檢視結果樹),因為我新增監聽器的位置不同,他們的作用域也是不一樣的。前一個只能監聽到www.126.com頁面的請求,後一個側對所有的http請求進行監聽。
元件的作用域
先來討論一下元件有作用域。《Jmeter基礎之---jmeter基礎概念》一章中,我們介紹了8類可被執行的元件(測試計劃與執行緒組不屬於元件),這些元件中,取樣器是典型的不與其它元件發生互動作用的元件,邏輯控制器只對其子節點的取樣器有效,而其它元件(
配置元件(config elements )
元件會影響其作用範圍內的所有元件。
前置處理程式(Per-processors)
元件在其作用範圍內的每一個sampler元件之前執行。
定時器(timers )
元件對其作用範圍內的每一個sampler 有效
後置處理程式(Post-processors)
元件在其作用範圍內的每一個sampler元件之後執行。
斷言(Assertions)
元件對其作用範圍內的每一個sampler
監聽器(Listeners)
元件收集其作用範圍的每一個sampler元件的資訊並呈現。
在jmeter中,元件的作用域是靠測試計劃的的樹型結構中元件的父子關係來確定的,作用域的原則是:
- 取樣器(sampler)元件不和其它元件相互作用,因此不存在作用域的問題。
- 邏輯控制器(Logic Controller)元件只對其子節點中的取樣器 和 邏輯控制器作用。
- 除取樣器 和邏輯控制器 元件外,其他6類元件,如果是某個sampler的子節點,則該元件公對其父子節點起作用。
- 除取樣器和邏輯控制器元件外的其他6類元件,如果其父節點不是sampler ,則其作用域是該元件父節點下的其他所有後代節點(包括子節點,子節點的子節點等)。
講了這些,你可能迷糊了,到底是腫麼個情況呀!?通過兩個栗子(例子)來理解一下他們的作用域。
A(注:下圖只是為了說明作用域,無法正常執行)
取樣器(HTTP請求1 、FTP請求2 、TCP取樣器3) 邏輯控制器(迴圈控制器) 監聽器(圖形結果1、聚合報告2)
* HTTP請求1 、FTP請求2 、TCP取樣器3 元件沒有作用域的概念。
* 迴圈控制器 元件作用域名是其子節點FTP請求2 、TCP取樣器3 。
* 圖形結果1 元件的作用域是是FTP請求2 、TCP取樣器3。
* 聚合報告2 元作的作用域是HTTP請求1 、FTP請求2 、TCP取樣器3
B (注:下圖只是為了說明作用域,無法正常執行)
這個例子稍微複雜一些,包含的元件較多。先來分分類。
取樣器(HTTP請求 、FTP請求 、TCP取樣器、 JDBC Request )邏輯控制器(迴圈控制器、隨即控制器)定時器(固定定時器、Uniform Random Timer )斷言(響應斷言、XML斷言)監聽器(圖形結果、聚合報告)
根據作用域原則,這些元件的作用域分別為:
* HTTP請求 、FTP請求 、TCP取樣器、 JDBC Request 元件沒有作用域名概念
* 迴圈控制器 的作用域為 FTP請求 、TCP取樣器和 隨即控制器
* 固定定時器作用於 HTTP請求 , Uniform Random Timer 作用於所有取樣器
* 響應斷言作用於JDBC Request , XML斷言作用於FTP請求 、TCP取樣和JDBC Request 。
* 圖形結果作用於FTP請求 、TCP取樣和JDBC Request ,聚合報告作用於作用於所有取樣器。
其實,通過上面的分析,並沒有你想象的那麼複雜,我們從各個元件的層次結構就可以判斷每個元件的作用域。
Jmeter 中的邏輯控制器(Config Elements)在其作用範圍內的行為與其他元件相比稍有不同。邏輯控制器元件分兩大類:預設配置(HTTP預設請求、FTP預設請求等)和 管理(HTTP 頭管理、HTTP cookie 管理等)。 其中預設配置(Configuration Defaults)元件中設定的值可以在作用域內疊加,例如,在一個測試計劃中新增兩個HTTP 預設請求,其中第一個預設設定 Server name or IP 為www.google.com ,第二個預設設定Path 為/page-not-exist , 則在這兩個元件作用域內的所有HTTP 預設請求,其預設的Server name or IP 和Path 均為Server name or IP 和 /page-not-exist 。(你有一個故事,我有一個笑話,我們一交換,兩個人都分別擁有了一個故事加一個笑話。) 管理(Manager)類邏輯控制器元件的效果則不能進行疊加。如果兩個或兩個以上相同的管理類元件作用域有重疊。則在重疊作用域內的取樣器元件只會隨即受到其中一個的作用,這樣會導致取樣器行為的不確定性。因此,在使用管理類邏輯控制器時,一定要注意保證相同的管理類元件的作用域不發生重疊。 |
元件的執行順序
瞭解了元件有作用域之後,來看看元件的執行順序,元件執行順序的規則很簡單,在同一作用域名範圍內,測試計劃中的元件按照如下順序執行。
(1)配置元件(config elements )
(2)前置處理程式(Per-processors)
(3)定時器(timers )
(4)取樣器(Sampler)
(5)後置處理程式(Post-processors) (除非Sampler 得到的返回結果為空)。
(6)斷言(Assertions)(除非Sampler 得到的返回結果為空)。
(7)監聽器(Listeners)(除非Sampler 得到的返回結果為空)。
關於執行順序,有兩點需要注意:
* 前置處理器、後置處理器和斷言等元件公能對 取樣器作用,因此,如果在它們的作用域內沒有任何取樣器,則不會被執行。
* 如果在同一作用域範圍內有多個同一型別的元件,則這些元件按照它們在測試計劃中的上下順序一次執行。
------------------------------
注:本檔案中提到的取樣器(Sampler)在有些資料中翻譯為“取樣器”。