對于新手來說,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中,元件的作用域是靠測試計劃的的樹型結構中元件的父子關系來確定的,作用域的原則是:
1.取樣器(sampler)元件不和其它元件相互作用,因此不存在作用域的問題。
2.邏輯控制器(Logic Controller)元件只對其子節點中的取樣器 和 邏輯控制器作用。
3.除取樣器 和邏輯控制器 元件外,其他6類元件,如果是某個sampler的子節點,則該元件公對其父子節點起作用。
4.除取樣器和邏輯控制器元件外的其他6類元件,如果其父節點不是sampler ,則其作用域是該元件父節點下的其他所有后代節點(包括子節點,子節點的子節點等)。
講了這些,你可能迷糊了,到底是腫么個情況呀!?通過兩個栗子(例子)來理解一下他們的作用域。
A(注:下圖只是為了說明作用域,無法正常運行)
取樣器(HTTP請求1 、FTP請求2 、TCP取樣器3) 邏輯控制器(循環控制器) 監聽器(圖形結果1、聚合報告2)
1. HTTP請求1 、FTP請求2 、TCP取樣器3 元件沒有作用域的概念。
2. 循環控制器 元件作用域名是其子節點FTP請求2 、TCP取樣器3 。
3. 圖形結果1 元件的作用域是是FTP請求2 、TCP取樣器3。
4. 聚合報告2 元作的作用域是HTTP請求1 、FTP請求2 、TCP取樣器3
B (注:下圖只是為了說明作用域,無法正常運行)
這個例子稍微復雜一些,包含的元件較多。先來分分類。
取樣器(HTTP請求 、FTP請求 、TCP取樣器、 JDBC Request )邏輯控制器(循環控制器、隨即控制器)定時器(固定定時器、Uniform Random Timer )斷言(響應斷言、XML斷言)監聽器(圖形結果、聚合報告)