JMeter-Samplers采樣器

18.1 采樣器


HTTP Request


HTTP采樣器可以向web服務(wù)器發(fā)送http/https請(qǐng)求勺远,并且可以控制jmeter是否解析圖像和其他嵌入資源的html文件,并發(fā)送http請(qǐng)求來(lái)檢索它們时鸵。HTTP采樣器檢索以下類(lèi)型的嵌入資源:

  • 圖像
  • 小程序
  • 樣式表(css)和從這些文件引用的資源
  • 外部腳本
  • frames,iframes
  • 背景圖像(正文胶逢、表格、TD饰潜、TR)
  • 背景聲音

默認(rèn)解析器是org.apache.jmeter.protocol.http.parser.lagartobasedhmlparser初坠,可以通過(guò)屬性htmlparser.className進(jìn)行更改。
如果要向同一個(gè)web服務(wù)器發(fā)送多個(gè)請(qǐng)求彭雾,最好使用http請(qǐng)求默認(rèn)配置元素碟刺,這樣就不必為每個(gè)http請(qǐng)求輸入相同的信息。
或者薯酝,使用jmeter的HTTP Request Defaults來(lái)幫助我們快速創(chuàng)建帶有參數(shù)的http請(qǐng)求半沽。
有兩種不同的測(cè)試元素用于定義采樣器:
AJP/1.3 Sampler
HTTP請(qǐng)求
<font color=#A52A2A>Java請(qǐng)求</font>
<font color=#A52A2A>HTTPClient4</font>
Java HTTP實(shí)現(xiàn)有一些局限性:

  • 無(wú)法控制如何重連。當(dāng)jmeter釋放連接時(shí)吴菠,它可能被同一個(gè)線程重用者填,也可能不被同一個(gè)線程重用。
  • API最適合單線程使用-通過(guò)系統(tǒng)屬性定義各種設(shè)置做葵,因此適用于所有連接占哟。
  • 不支持kerberos身份驗(yàn)證
  • 它不支持使用密鑰庫(kù)配置進(jìn)行基于客戶端的證書(shū)測(cè)試。
  • 更好地控制重試機(jī)制
  • 不支持虛擬機(jī)
  • 它只支持以下方法蜂挪,get重挑、post、head棠涮、options、put刺覆、delete和trace严肪。
  • 使用dns緩存管理器更好地控制dns緩存。

如果請(qǐng)求需要服務(wù)器或代理登錄授權(quán),則還必須添加http authorization manager配置元素驳糯。對(duì)于正常登錄(即用戶在表單中輸入登錄信息)篇梭,需要使用適當(dāng)?shù)姆椒ǎㄍǔJ莗ost)和表單定義中的適當(dāng)參數(shù)創(chuàng)建http請(qǐng)求。如果頁(yè)面使用http酝枢,則可以使用jmeter代理來(lái)捕獲登錄序列恬偷。

每個(gè)線程使用單獨(dú)的SSL上下文。如果要使用單個(gè)SSL上下文(不是瀏覽器的標(biāo)準(zhǔn)行為)帘睦,請(qǐng)?jiān)O(shè)置jmeter屬性:

https.sessioncontext.shared=true

自5.0版以來(lái)袍患,默認(rèn)情況下,SSL上下文在線程組迭代期間保留竣付,并為每個(gè)測(cè)試迭代重置诡延。如果在測(cè)試計(jì)劃中,同一個(gè)用戶重復(fù)多次古胆,那么應(yīng)該將其設(shè)置為false肆良。這個(gè)配置不適用于Java的HTTP實(shí)現(xiàn)。

httpclient.reset_state_on_thread_group_iteration=true

jmeter默認(rèn)為SSL協(xié)議級(jí)別TLS逸绎。如果服務(wù)器需要不同的級(jí)別惹恃,例如SSLv3,請(qǐng)更改jmeter屬性棺牧,例如:

https.default.protocol=SSLv3

jmeter還允許通過(guò)更改屬性https.socket.protocols啟用其他協(xié)議巫糙。
如果請(qǐng)求使用cookies,那么還需要一個(gè)http cookie管理器陨帆,可以將這些元素添加到線程組或http請(qǐng)求中曲秉。如果有多個(gè)需要授權(quán)或cookie的http請(qǐng)求,請(qǐng)將元素添加到線程組疲牵。這樣承二,所有http請(qǐng)求控制器都將共享相同的授權(quán)管理器和cookie管理器元素。
如果請(qǐng)求使用名為“url重寫(xiě)”的技術(shù)來(lái)維護(hù)會(huì)話纲爸,可能還需要使用其他配置 6.1 Handling User Sessions With URL Rewriting

Java Request


這個(gè)采樣器允許我們使用自定義Java類(lèi)控制多個(gè)線程亥鸠、輸入?yún)?shù)和數(shù)據(jù)收集,首先該類(lèi)必須實(shí)現(xiàn)org.apache.jmeter.protocol.java.sampler.javasamplerclient接口识啦。


Java請(qǐng)求控制面板.png

如果方法teardownTest沒(méi)有被AbstractJavaSamplerClient的子類(lèi)重寫(xiě)负蚊,則不會(huì)調(diào)用teardownTest方法。這樣做是為了減少了JMeter內(nèi)存需求颓哮,但并不會(huì)對(duì)現(xiàn)有的測(cè)試計(jì)劃產(chǎn)生任何影響家妆。

Add/Delete按鈕目前沒(méi)有任何作用。

  • Parameters
Attribute Description Required
Name 采樣器名稱 NO
Classname 需要采樣的JavaSamplerClient接口的具體實(shí)現(xiàn)類(lèi) YES
Send Parameters with Request 采樣類(lèi)的參數(shù)列表冕茅。所有參數(shù)都作為字符串發(fā)送伤极。具體設(shè)置見(jiàn)下文蛹找。 NO

以下參數(shù)適用于SleepTestJavaTest實(shí)現(xiàn):

  • Parameters
Attribute Description Required
Sleep_time 休眠時(shí)間 YES
Sleep_mask 總的休眠時(shí)間計(jì)算如下:totalSleepTime = SleepTime + (System.currentTimeMillis() % SleepMask) YES

此外,JavaTest的實(shí)現(xiàn)還用到以下參數(shù):

  • Parameters
Attribute Description Required
Label 如果使用該屬性哨坪,則會(huì)自動(dòng)替換Name屬性 NO
ResponseCode 該屬性用于設(shè)置SampleResult的響應(yīng)碼 NO
ResponseMessage 該屬性用于設(shè)置SampleResult的響應(yīng)正文 NO
Status 用于設(shè)置SampleResult的狀態(tài)庸疾,如果該項(xiàng)設(shè)為“OK”(忽略大小寫(xiě)),則認(rèn)為該Sample成功当编,否則失敗 NO
SamplerData 設(shè)置SampleResult的SamplerData NO
ResultData 設(shè)置SampleResult的ResultData NO

JSR223 Sampler


JSR223采樣器允許使用JSR223腳本代碼執(zhí)行創(chuàng)建或更新變量所需的采樣器或某些計(jì)算届慈。

如果不希望在運(yùn)行此采樣器時(shí)生成采樣器結(jié)果(Sample Result),需要調(diào)用以下方法:
sampleResult.setIgnore();

JSR223有一個(gè)可以顯著提高性能的特性忿偷,受益于該特性:

  • JSR223采用Script files的方式而不是代碼嵌入金顿,這樣JMeter可以編譯并緩存腳本;
  • 或者使用Script Text+檢查屬性Cache compiled script if available的方式牵舱。

1.使用此功能時(shí)串绩,需要保證腳本代碼不會(huì)直接使用JMeter變量,而是使用腳本參數(shù)芜壁,因?yàn)榫彺嬷粫?huì)緩存第一個(gè)替換項(xiàng)礁凡。
2.為了從緩存和編譯中獲益,用于腳本編寫(xiě)的語(yǔ)言引擎必須實(shí)現(xiàn)JSR223可編譯接口(Groovy支持此功能慧妄,java顷牌、beanshell和javascript都不支持)。
3.當(dāng)使用Groovy作為腳本語(yǔ)言并且不檢查Cache compiled script if available屬性(建議使用緩存)時(shí)塞淹,應(yīng)添加一條JVM屬性-Dgroovy.use.classvalue=true窟蓝,如果不這樣設(shè)置,2.4.6版以后的Groovy有可能內(nèi)存泄漏饱普,請(qǐng)參閱:

如下的JMeter屬性可以控制緩存大性舜臁:

jsr223.compiled_scripts_cache_size=100

在腳本引擎支持的情況下,JSR223測(cè)試元素使用Script files或Script Text+檢查Cache compiled script if available屬性的方式都會(huì)被編譯套耕,這將使性能得到極大的增強(qiáng)谁帕。

JSR223采樣器控制面板.png

JMeter在將腳本字段傳遞給解釋器之前處理函數(shù)和變量引用,因此這些引用只解析一次冯袍。腳本文件中的變量和函數(shù)引用將逐字傳遞給解釋器匈挖,可能會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤。因此康愤,為了使用運(yùn)行時(shí)變量儡循,請(qǐng)使用適當(dāng)?shù)膒rops方法,例如征冷。

props.get("START.HMS");
props.put("PROP1","1234");

  • Parameters
Attribute Description Required
Name 采樣器名字 NO
Scripting Language 使用的JSR223腳本語(yǔ)言的名稱择膝,這是一個(gè)下拉框。 YES
Script File JSR223腳本的文件名检激,如果使用相對(duì)文件路徑调榄,則它將相對(duì)于“user.dir”系統(tǒng)屬性引用的目錄踊赠。 NO
Parameters 傳給腳本文件或腳本的參數(shù)列表呵扛。 NO
Cache compiled script if available 如果選中該屬性(推薦選中)每庆,并且所使用的語(yǔ)言支持可編譯接口(Groovy支持,java今穿、beanshell和java script不支持)缤灵,JMeter將編譯腳本并使用其md5散列作為唯一的緩存鍵來(lái)緩存它。 NO
Script 腳本名蓝晒,與Script File二者必須有一個(gè)存在 YES

如果提供了Script File腮出,則將使用該文件,否則將使用Script芝薇。
在調(diào)用腳本之前胚嘲,會(huì)設(shè)置一些JSR223變量,它們可以直接在腳本中使用洛二。

  • log - Logger
  • Label - the Sampler label
  • FileName
  • Parameters
  • args - 參數(shù)馋劈,如上所述
  • SampleResult - 指針指向當(dāng)前的SampleResult
  • sampler - (Sampler)指針指向當(dāng)前的Sampler
  • ctx - JMeterContext
  • vars - JMeterVariables,例如:

vars.get("VAR1");
vars.put("VAR2","value");
vars.remove("VAR3");
vars.putObject("OBJ1",new Object());

props.get("START.HMS");
props.put("PROP1","1234");

  • OUT - System.out妓雾,例如:

OUT.println("message")

SampleResult的ResponseData是從腳本的返回值里設(shè)置的。如果腳本返回null垒迂,則可以使用SampleResult.setResponseData(data)方法直接設(shè)置響應(yīng)械姻,其中的數(shù)據(jù)可以是字符串或字節(jié)數(shù)組。數(shù)據(jù)類(lèi)型默認(rèn)為“文本”机断,但也可以使用方法SampleResult.setDataType(sampleResult.binary)將其設(shè)置為二進(jìn)制楷拳。
SampleResult變量使腳本可以完全訪問(wèn)SampleResult中的所有字段和方法。例如吏奸,腳本可以訪問(wèn)方法setStopThread(boolean)和setStopTest(boolean)欢揖。
與BeanShell采樣器不同,JSR223采樣器不通過(guò)腳本變量設(shè)置ResponseCode苦丁、ResponseMessage和sample的狀態(tài)浸颓。目前改變這些變量的唯一方法是通過(guò)SampleResult方法:

  • SampleResult.setSuccessful(true/false)
  • SampleResult.setResponseCode("code")
  • SampleResult.setResponseMessage("message")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市旺拉,隨后出現(xiàn)的幾起案子产上,更是在濱河造成了極大的恐慌,老刑警劉巖蛾狗,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晋涣,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡沉桌,警方通過(guò)查閱死者的電腦和手機(jī)谢鹊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)算吩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人佃扼,你說(shuō)我怎么就攤上這事偎巢。” “怎么了兼耀?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵压昼,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我瘤运,道長(zhǎng)窍霞,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任拯坟,我火速辦了婚禮但金,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘郁季。我一直安慰自己冷溃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布巩踏。 她就那樣靜靜地躺著秃诵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪塞琼。 梳的紋絲不亂的頭發(fā)上菠净,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音彪杉,去河邊找鬼毅往。 笑死,一個(gè)胖子當(dāng)著我的面吹牛派近,可吹牛的內(nèi)容都是我干的攀唯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼渴丸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼侯嘀!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起谱轨,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤戒幔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后土童,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體诗茎,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年献汗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了敢订。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片王污。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖楚午,靈堂內(nèi)的尸體忽然破棺而出昭齐,到底是詐尸還是另有隱情,我是刑警寧澤醒叁,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布司浪,位于F島的核電站,受9級(jí)特大地震影響把沼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吁伺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一饮睬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧篮奄,春花似錦捆愁、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至夸赫,卻和暖如春菩帝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背茬腿。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工呼奢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人切平。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓握础,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親悴品。 傳聞我的和親對(duì)象是個(gè)殘疾皇子禀综,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355