前面有介紹過jmeter的元件類別,對於新手來說,jmeter的元件是還是不少的,如果我們按照每一個元件的每一個參數的含義去學習,無疑會降低學習性能測試的熱情,就算我們熟悉了所有元件以及元件上的參數了,我們也不知道如何將其組合成我們想要描述的性能測試。另一方面,我們點擊每個節點上的元件都會出現類似或相同的菜單,他們的層級關系是什么樣的。究竟這個元件放在哪個層級的哪個位置才達到我們意願。
如何更快速的入門jmeter,個人建議通過錄制腳本的方式,快速的了解一個性能測試應該包括的元件以及它們的層級關系。
關於錄制方式,請參考《JMeter基礎之—錄制腳本》
如下,我通過badboy工具錄制的一個腳本(腳本過程:登錄126郵箱,給自己發一封郵件,祝自己聖誕快樂!),並可以方便的將腳本導出為jmx格式,這也是jmeter腳本的格式,所以可以被jmeter識別並導入。
腳本導入到jmeter后,我添加了兩個監聽器(查看結果樹),因為我添加監聽器的位置不同,他們的作用域也是不一樣的。前一個只能監聽到www.126.com頁面的請求,后一個側對所有的http請求進行監聽。
元件的作用域
先來討論一下元件有作用域。《Jmeter基礎之---jmeter基礎概念》一章中,我們介紹了8類可被執行的元件(測試計划與線程組不屬於元件),這些元件中,取樣器是典型的不與其它元件發生交互作用的元件,邏輯控制器只對其子節點的取樣器有效,而其它元件(config elements 、timers 、post-processors、assertions、listeners、)需要與取樣器(sampler)等元件交互。
配置元件(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)在有些資料中翻譯為“采樣器”。
相關閱讀:
Jmeter基礎之---jmeter基礎概念
JMeter基礎之—錄制腳本
JMeter基礎之一 一個簡單的性能測試