JMeter的屬性和變量
JMeter屬性統一定義在jmeter.properties文件中。JMeter屬性在測試腳本的任何地方都是可見的(全局),通常被用來定義 一些JMeter使用的默認值。例如,屬性remote_hosts定義了JMeter在遠程模式下運行的服務器地址。屬性可以在測試計劃中引用,但是不能作為特定線程的變量值。
JMeter變量對于測試線程而言是局部變量。這就意味著JMeter變量在不同測試線程中,既可以是完全相同的,也可以是不同的。
通過測試計劃和"用戶定義的變量"(配置元件)兩種方式定義的變量,在JMeter啟動時對這個測試計劃都是可見的。如果同一個變量在多個"用戶定 義的變量"(配置元件)中被定義,那么只有最后一個定義會生效。一旦某個線程啟動后,那么整個變量集合的初始值就會被復制到該線程中。其他測試元件,例 如"用戶變量"(前置處理器)或者"正則表達式提取器"(后置處理器)可以被用來重新定義變量(或者創建新變量),這些重定義僅僅影響當前線程。
可以通過_setProperty 函數來定義JMeter屬性。JMeter屬性對于整個測試計劃都是可見的(全局),因此可以用于在線程間傳遞信息(這種情況并不多見)。
屬性和變量都是大小寫敏感的。
取樣器( Sampler )
取樣器( Sampler )是性能測試中向服務器發送請求,記錄響應信息,記錄響應時間的最小單元, JMeter 原生支持多種不同的 sampler ,如 HTTP Request Sampler 、 FTP Request Sampler 、 TCP Request Sampler 、 JDBC Request Sampler 等,每一種不同類型的 sampler 可以根據設置的參數向服務器發出不同類型的請求。
定時器( Timer )
定時器(
Timer
)用于操作之間設置等待時間,等待時間是性能測試中常用的控制客戶端
QPS
的手端。類似于
LoadRunner
里面的
“
思考時間
”
。
JMeter
定義了
Bean Shell Timer
、
Constant Throughput Timer
、固定定時器等不同類型的
Timer
。
前置處理器( Per Processors )
用于在實際的請求發出之前對即將發出的請求進行特殊處理。例如, HTTP URL 重寫修復符則可以實現 URL 重寫,當 URL 中有 sessionID 一類的 session 信息時,可以通過該處理器填充發出請求的實際的 sessionID 。
后置處理器( Post Processors )
用于對 Sampler 發出請求后得到的服務器響應進行處理。一般用來提取 響應中的特定數據(類似 LoadRunner 測試工具中的關聯概念)。例如, XPath Extractor 則可以用于提取響應數據中通過給定 XPath 值獲得的數據。
元件的作用域
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?,則其作用域是該元件父節點下的其他所有后代節點(包括子節點,子節點的子節點等)。
元件的執行順序
了解了元件有作用域之后,來看看元件的執行順序,元件執行順序的規則很簡單,在同一作用域名范圍內,測試計劃中的元件按照如下順序執行。
(1)配置元件(config?elements?)
(2)前置處理程序(Per-processors)
(3)定時器(timers?)
(4)取樣器(Sampler)
(5)后置處理程序(Post-processors)?(除非Sampler?得到的返回結果為空)。
(6)斷言(Assertions)(除非Sampler?得到的返回結果為空)。
(7)監聽器(Listeners)(除非Sampler?得到的返回結果為空)。
?
關于執行順序,有三點需要注意:
*??前置處理器、后置處理器和斷言等元件只能對?取樣器作用,因此,如果在它們的作用域內沒有任何取樣器,則不會被執行。
*??如果在同一作用域范圍內有多個同一類型的元件,則這些元件按照它們在測試計劃中的 上下順序一次執行。
* ?一個斷言在測試樹中是分等級的。如果它的父元件是請求,它就被應用于那個請求。如果它的父元件是控制器,它就影響所有那個控制器下的所有請求。
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
