JMeter的屬性和變量
JMeter屬性統(tǒng)一定義在jmeter.properties文件中。JMeter屬性在測(cè)試腳本的任何地方都是可見的(全局),通常被用來(lái)定義 一些JMeter使用的默認(rèn)值。例如,屬性remote_hosts定義了JMeter在遠(yuǎn)程模式下運(yùn)行的服務(wù)器地址。屬性可以在測(cè)試計(jì)劃中引用,但是不能作為特定線程的變量值。
JMeter變量對(duì)于測(cè)試線程而言是局部變量。這就意味著JMeter變量在不同測(cè)試線程中,既可以是完全相同的,也可以是不同的。
通過(guò)測(cè)試計(jì)劃和"用戶定義的變量"(配置元件)兩種方式定義的變量,在JMeter啟動(dòng)時(shí)對(duì)這個(gè)測(cè)試計(jì)劃都是可見的。如果同一個(gè)變量在多個(gè)"用戶定 義的變量"(配置元件)中被定義,那么只有最后一個(gè)定義會(huì)生效。一旦某個(gè)線程啟動(dòng)后,那么整個(gè)變量集合的初始值就會(huì)被復(fù)制到該線程中。其他測(cè)試元件,例 如"用戶變量"(前置處理器)或者"正則表達(dá)式提取器"(后置處理器)可以被用來(lái)重新定義變量(或者創(chuàng)建新變量),這些重定義僅僅影響當(dāng)前線程。
可以通過(guò)_setProperty 函數(shù)來(lái)定義JMeter屬性。JMeter屬性對(duì)于整個(gè)測(cè)試計(jì)劃都是可見的(全局),因此可以用于在線程間傳遞信息(這種情況并不多見)。
屬性和變量都是大小寫敏感的。
取樣器( Sampler )
取樣器( Sampler )是性能測(cè)試中向服務(wù)器發(fā)送請(qǐng)求,記錄響應(yīng)信息,記錄響應(yīng)時(shí)間的最小單元, JMeter 原生支持多種不同的 sampler ,如 HTTP Request Sampler 、 FTP Request Sampler 、 TCP Request Sampler 、 JDBC Request Sampler 等,每一種不同類型的 sampler 可以根據(jù)設(shè)置的參數(shù)向服務(wù)器發(fā)出不同類型的請(qǐng)求。
定時(shí)器( Timer )
定時(shí)器(
Timer
)用于操作之間設(shè)置等待時(shí)間,等待時(shí)間是性能測(cè)試中常用的控制客戶端
QPS
的手端。類似于
LoadRunner
里面的
“
思考時(shí)間
”
。
JMeter
定義了
Bean Shell Timer
、
Constant Throughput Timer
、固定定時(shí)器等不同類型的
Timer
。
前置處理器( Per Processors )
用于在實(shí)際的請(qǐng)求發(fā)出之前對(duì)即將發(fā)出的請(qǐng)求進(jìn)行特殊處理。例如, HTTP URL 重寫修復(fù)符則可以實(shí)現(xiàn) URL 重寫,當(dāng) URL 中有 sessionID 一類的 session 信息時(shí),可以通過(guò)該處理器填充發(fā)出請(qǐng)求的實(shí)際的 sessionID 。
后置處理器( Post Processors )
用于對(duì) Sampler 發(fā)出請(qǐng)求后得到的服務(wù)器響應(yīng)進(jìn)行處理。一般用來(lái)提取 響應(yīng)中的特定數(shù)據(jù)(類似 LoadRunner 測(cè)試工具中的關(guān)聯(lián)概念)。例如, XPath Extractor 則可以用于提取響應(yīng)數(shù)據(jù)中通過(guò)給定 XPath 值獲得的數(shù)據(jù)。
元件的作用域
JMeter中共有 8 類可被執(zhí)行的元件( 測(cè)試計(jì)劃與線程組不屬于元件), 這些元件中,取樣器是典型的不與其它元件發(fā)生交互作用的元件,邏輯控制器只對(duì)其子節(jié)點(diǎn)的取樣器有效,而其它元件(config?elements?、 timers?、post-processors、assertions、listeners、)需要與取樣器(sampler)等元件交互。
配置元件(config?elements? ) ?
元件會(huì)影響其作用范圍內(nèi)的所有元件。
前置處理程序(Per-processors)
元件在其作用范圍內(nèi)的每一個(gè)sampler元件之前執(zhí)行。
定時(shí)器(timers?)
元件對(duì)其作用范圍內(nèi)的每一個(gè)sampler?有效
后置處理程序(Post-processors)
元件在其作用范圍內(nèi)的每一個(gè)sampler元件之后執(zhí)行。
斷言(Assertions)
元件對(duì)其作用范圍內(nèi)的每一個(gè)sampler?元件執(zhí)行后的結(jié)果執(zhí)行校驗(yàn)。
監(jiān)聽器(Listeners)
元件收集其作用范圍的每一個(gè)sampler元件的信息并呈現(xiàn)。
在jmeter中,元件的作用域是靠測(cè)試計(jì)劃的的樹型結(jié)構(gòu)中元件的父子關(guān)系來(lái)確定的,作用域的原則是:
- ?取樣器(sampler)元件不和其它元件相互作用,因此不存在作用域的問(wèn)題。
- ?邏輯控制器(Logic?Controller)元件只對(duì)其子節(jié)點(diǎn)中的取樣器?和?邏輯控制器作用。
- ?除取樣器?和邏輯控制器?元件外,其他6類元件,如果是某個(gè)sampler的子節(jié)點(diǎn),則該元件公對(duì)其父子節(jié)點(diǎn)起作用。
- ?除取樣器和邏輯控制器元件外的其他6類元件,如果其父節(jié)點(diǎn)不是sampler?,則其作用域是該元件父節(jié)點(diǎn)下的其他所有后代節(jié)點(diǎn)(包括子節(jié)點(diǎn),子節(jié)點(diǎn)的子節(jié)點(diǎn)等)。
元件的執(zhí)行順序
了解了元件有作用域之后,來(lái)看看元件的執(zhí)行順序,元件執(zhí)行順序的規(guī)則很簡(jiǎn)單,在同一作用域名范圍內(nèi),測(cè)試計(jì)劃中的元件按照如下順序執(zhí)行。
(1)配置元件(config?elements?)
(2)前置處理程序(Per-processors)
(3)定時(shí)器(timers?)
(4)取樣器(Sampler)
(5)后置處理程序(Post-processors)?(除非Sampler?得到的返回結(jié)果為空)。
(6)斷言(Assertions)(除非Sampler?得到的返回結(jié)果為空)。
(7)監(jiān)聽器(Listeners)(除非Sampler?得到的返回結(jié)果為空)。
?
關(guān)于執(zhí)行順序,有三點(diǎn)需要注意:
*??前置處理器、后置處理器和斷言等元件只能對(duì)?取樣器作用,因此,如果在它們的作用域內(nèi)沒有任何取樣器,則不會(huì)被執(zhí)行。
*??如果在同一作用域范圍內(nèi)有多個(gè)同一類型的元件,則這些元件按照它們?cè)跍y(cè)試計(jì)劃中的 上下順序一次執(zhí)行。
* ?一個(gè)斷言在測(cè)試樹中是分等級(jí)的。如果它的父元件是請(qǐng)求,它就被應(yīng)用于那個(gè)請(qǐng)求。如果它的父元件是控制器,它就影響所有那個(gè)控制器下的所有請(qǐng)求。
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

