jmeter入門基礎(chǔ)(1)—一個最簡單的測試腳本

? ? ? ? 應(yīng)項目組要求對負責(zé)的搜索平臺做性能測試瞧筛,當(dāng)時測試組前輩推薦使用jmeter纺座,和jmeter由此結(jié)緣息拜。當(dāng)然學(xué)習(xí)過程中,知識儲備少净响,也順帶學(xué)習(xí)了很多其他相關(guān)的知識少欺。這篇博客,是將平時學(xué)習(xí)的關(guān)于jmeter一些皮毛基礎(chǔ)和使用技巧整合下來馋贤,方便自己回顧的同時方便其他同行參考赞别。

一、優(yōu)點

1配乓、開源工具仿滔,可擴展性非常好。

2犹芹、高可擴展性崎页,用戶可自定義調(diào)試相關(guān)模塊代碼。

3腰埂、精心簡單的GUI設(shè)計飒焦,小巧靈活。

4屿笼、完全的可移植性和100%純java荒给。

5、完全swing和輕量組件支持(預(yù)編譯的HAR使用javax.swing.*)包刁卜。

6志电、完全多線程框架,允許通過多個線程并發(fā)取樣以及單獨的線程對不同的功能同時取樣蛔趴。

7挑辆、支持腳本取樣器。

二孝情、安裝及下載

jmeter官網(wǎng)下載URL:Apache JMeter - Download Apache JMeter鱼蝉,目前最新版本是5.0版本,jmeter本身不需要安裝箫荡,只需要配置好JDK環(huán)境魁亦,然后在在jmeter文件中的bin文件中打開jmeter.bat文件即可。最新版本羔挡,建議配置的JDK最好用1.8及以上版本洁奈。

JDK官網(wǎng)下載URL:Java SE Development Kit 8 - Downloads

jmeter官網(wǎng)學(xué)習(xí)文檔URL:Apache JMeter - User's Manual

三间唉、基礎(chǔ)構(gòu)成

1、組成部分

1)負載發(fā)生器:產(chǎn)生負載利术,多進程或多線程模擬用戶行為呈野。

2)用戶運行器:腳本運行引擎,用戶運行器附加在進程或線程上印叁,根據(jù)腳本模擬指定的用戶行為被冒。

3)資源生成器:生成測試過程中服務(wù)器、負載機的資源數(shù)據(jù)轮蜕。

4)報表生成器:根據(jù)測試中獲得的數(shù)據(jù)生成報表昨悼,提供可視化的數(shù)據(jù)顯示方式。

2跃洛、基本概念

添加線程組

2.1測試計劃(test plan)

描述一個性能測試幔戏,包含本次測試所有相關(guān)功能。

2.2.threads(users)線程

Setup thread group:一種特殊類型的線程税课,可用于執(zhí)行預(yù)測試操作闲延。即執(zhí)行測試前進行定期線程組的執(zhí)行。

Teardown thread group:一種特殊類型的線程韩玩,可用于執(zhí)行測試后動作垒玲。即執(zhí)行測試結(jié)束后執(zhí)行定期的線程組。

Thread group:通常添加使用的線程找颓,一般一個線程組可看做一個虛擬用戶組合愈,其中每個線程為一個虛擬用戶。

2.3測試片段(test fragment)

2.5版本之后新增的一個選項击狮,是一種特殊的線程組佛析,在測試樹上與線程組一個層級,但是它不被執(zhí)行彪蓬,除非它是一個模塊控制器或者被控制器所引用時才會被執(zhí)行寸莫。

2.4控制器

Jmeter有2種控制器:取樣器(sampler)和邏輯控制器(Logic Controller)。

作用是用這些原件驅(qū)動處理一個測試档冬。

添加邏輯控制器:簡單控制器
添加取樣器:HTTP請求

1)取樣器(Sampler)

性能測試中向服務(wù)器發(fā)送請求膘茎,記錄響應(yīng)信息,記錄響應(yīng)時間的最小單元酷誓,jmeter原生支持多種不同的的sample披坏,

如?HTTP?Request?Sampler?、?FTP??Request?Sampler 盐数、TCP??Request?Sampler 粹舵、JDBC?Request?Sampler?等炒俱。

每一種不同類型的?sampler?可以根據(jù)設(shè)置的參數(shù)向服務(wù)器發(fā)出不同類型的請求衣式。

Java?Request?Sampler?和?Beanshell?Request?Sampler?是兩種特殊的可定制的?Sampler?(暫不討論)。

2)邏輯控制器(Logic Controller)

Jmeter官網(wǎng)對邏輯控制器的解釋是:“Logic Controllers determine the order in which Samplers are processed.”谜诫。

意思是說,邏輯控制器可以控制采樣器(samplers)的執(zhí)行順序涮阔。由此可知猜绣,控制器需要和采樣器一起使用灰殴,否則控制器就沒有什么意義了敬特。放在控制器下面的所有的采樣器都會當(dāng)做一個整體,執(zhí)行時也會一起被執(zhí)行牺陶。

邏輯控制器包含兩類原件:一類是控制Test Plan中Sampler節(jié)點發(fā)送請求的邏輯順序控制器伟阔,例如If Controller、Swith Controller掰伸、Loop Controller皱炉、Random Controller等。另一類是用來組織和控制Sampler節(jié)點的狮鸭,即對測試計劃中的腳本進行分組合搅、方便JMeter統(tǒng)計執(zhí)行結(jié)果以及進行腳本的運行時控制等,例如Transaction Controller歧蕉、Throughput Controller等灾部。

jmeter控制器之一:

3)簡單控制器(Simple Controller

這是Jmeter里最簡單的一個控制器,它可以讓我們組織我們的采樣器和其它的邏輯控制器(分組功能)惯退,提供一個塊的結(jié)構(gòu)和控制赌髓,并不具有任何的邏輯控制或運行時的功能。

4)循環(huán)控制器(Loop Controller)

可以理解為:循環(huán)該控制器下子節(jié)點的次數(shù)催跪。

線程組里循環(huán)次數(shù)設(shè)置了n次锁蠕,循環(huán)控制器下的循環(huán)次數(shù)也設(shè)置了m次,則該控制器下的請求運行的次數(shù)是(n*m)次懊蒸。

5)僅一次控制器(Once Only Controller)

在測試計劃執(zhí)行期間荣倾,該控制器下的子結(jié)點對每個線程只執(zhí)行一次,登錄場景經(jīng)常會使用到這個控制器骑丸。

PS:將Once Only Controller作為Loop Controller的子節(jié)點逃呼,Once Only Controller在每次循環(huán)的第一次迭代時均會被執(zhí)行。

6)ForEach控制器(ForEach Controller)

ForEach控制器一般和用戶自定義變量一起使用者娱,其在用戶自定義變量中讀取一系列相關(guān)的變量抡笼。該控制器下的采樣器或控制器都會被執(zhí)行一次或多次,每次讀取不同的變量值黄鳍。

參數(shù):

? ? ? ?Input Variable Prefix:輸入變量前綴

? ? ? ?Output variable name:輸出變量名稱

? ? ? ?Start index for loop(exclusive):循環(huán)開始的索引(這里如果不填寫推姻,默認從1開始,如果沒有1開始的變量框沟,執(zhí)行時會報錯)

? ? ? ?End index for loop(inclusive):循環(huán)結(jié)束的索引

? ? ? ?Add”_”before number:輸入變量名稱中是否使用“_”進行間隔藏古。

用戶自定義變量:

  變量名前綴為ForEach Controller中Input variable prefix定義的name +?下劃線(上圖中我們勾選了下劃線)+數(shù)字編號

執(zhí)行結(jié)果:

  總共執(zhí)行了3次增炭,每次執(zhí)行時會把獲取到的變量值賦值給輸出變量outNmae,其它地方可以通過${outNmae}進行調(diào)用拧晕。

7)事務(wù)控制器(Transaction Controller)

事務(wù)控制器會生產(chǎn)一個額外的采樣器隙姿,用來統(tǒng)計該控制器子結(jié)點的所有時間。

應(yīng)用場景:?完成一個完整的頁面請求或一組請求

參數(shù):

? ? ? ? ?Generate parent sample:勾選后厂捞,所有的結(jié)果將在父結(jié)點中展示(選中這個參數(shù)結(jié)果展示如下圖紅框输玷,否則顯示為下圖藍框)。

? ? ? ? ?Include duration of timer and pre-post processors in generated sample:選中這一項會統(tǒng)計定時器(timer)的時間靡馁,否則只統(tǒng)計采樣器(sample)的時間欲鹏。

jmeter控制器之二 :

8)If?控制器(If Controller)

? ? ? ? 根據(jù)給定表達式的值決定是否執(zhí)行該節(jié)點下的子節(jié)點,默認使用javascript的語法進行判斷(如下圖紅框內(nèi)的文字)臭墨。

參數(shù):

? ? ? ? Interpret Condition as Variable Expression?:選中這一項時表示:判斷變量值是否等于字符串true(不區(qū)分大小寫)赔嚎。

? ? ? ? Evaluate for all children:如果選中這一項,在每個子結(jié)點執(zhí)行前都會計算表達式 胧弛。

9)Switch控制器(Switch Controller)

Switch控制器通過給該控制器中的Value賦值尤误,來指定運行哪個采樣器。

有兩種賦值方式:

? ? ? ? ? ?第一種是數(shù)值结缚,Switch控制器下的子節(jié)點從0開始計數(shù)损晤,通過指定子節(jié)點所在的數(shù)值來確定執(zhí)行哪個元素。

? ? ? ? ? ?第二種是直接指定子元素的名稱掺冠,比如采樣器的Name來進行匹配沉馆。當(dāng)指定的名稱不存在時,不執(zhí)行任何元素德崭。

? ? ? ? ? ?當(dāng)Value為空時斥黑,默認執(zhí)行第1個子節(jié)點元素。

10)吞吐量控制器(Throughput Controller)

控制其下的子節(jié)點的執(zhí)行次數(shù)與負載比例分配眉厨,別被名字迷惑了锌奴,跟吞吐量沒任何關(guān)系。也有兩種方式:Total Executions和Percent Executions憾股。

Total Executions:設(shè)置運行次數(shù)鹿蜀,整個測試計劃中總計執(zhí)行次數(shù)。

Percent Executions:設(shè)置運行比例(1~100之間)服球,整個測試計劃中總計執(zhí)行百分比茴恰。

Throughtput:?設(shè)計的數(shù)值。

Per User:?依據(jù)網(wǎng)上的說明在選擇Total Executions時斩熊,勾選時會在每個線程中執(zhí)行的次數(shù)往枣。但在3.0版本中嘗試使用無效 。

11)隨機控制器(Random Controller)

隨機執(zhí)行其下的某個子結(jié)點,隨機選擇控制器中的請求進行執(zhí)行分冈。

應(yīng)用場景:?頁面的隨機訪問圾另。

配置說明:ignore sub-controller blocks:?忽略子控制器 。

12)隨機順序控制器(Random Order Controller)

隨機執(zhí)行其下的所有子結(jié)點雕沉。與Random Controller不同的是集乔,這個控制器會先將需要隨機的內(nèi)容均執(zhí)行一遍,但次序不定坡椒。

應(yīng)用場景:?頁面的隨機訪問,但均需要訪問扰路,且次序不限。

jmeter控制器之三:

13)Critical Section Controller?關(guān)鍵部分控制器

用于核心部分的控制肠牲,確保其子節(jié)點下的取樣器或控制器在一個線程中僅會執(zhí)行一次幼衰。

應(yīng)用場景:?用戶登錄靴跛。

配制說明: Lock name:?鎖名稱缀雳,這里可以填入其子節(jié)點下執(zhí)行的線程的名稱,這個線程作為一個全局鎖存在梢睛。

14)Include Controller?引用外部測試計劃控制器

應(yīng)用場景:?測試過程中肥印,需要引用外部的測試計劃。

配制說明:Include Test Plan-Filename:?選擇需要引入的外部測試計劃文件 绝葡。

15)Interleave Controller?間隔控制器

也稱交替控制器深碱,使該控制器包含的取樣器步驟交錯執(zhí)行在每個循環(huán)中,每個線程用戶僅執(zhí)行一次控制器內(nèi)的請求藏畅,線程用戶依據(jù)循環(huán)的次數(shù)請求控制器中的請求數(shù)敷硅。

配制說明:ignore sub-controller blocks:?是否忽略子控制器 。

16)Module Controller?模塊控制器

模塊控制器愉阎,用于跳轉(zhuǎn)到選定的控制器位置并執(zhí)行對應(yīng)的控制器绞蹦。

應(yīng)用場景:?業(yè)務(wù)邏輯的跳轉(zhuǎn)。

配制說明:Module to Run:?選擇需要跳轉(zhuǎn)到的目標(biāo)控制器 榜旦。

尋找目標(biāo)元素(Find target element):尋找測試計劃中需要特定測試的元素幽七,模塊;也可理解為該控制器可以控制已經(jīng)封裝好的模塊元素溅呢。

PS01:一個測試計劃由一個控制器和所有的測試元素(取樣器等)組成澡屡,測試計劃可以位于任何線程組或工作臺;如果計劃位于線程組咐旧,則可以禁用其他控制器驶鹉,防止正在運行的測試計劃被影響(除了模塊控制器)。

PS02:模塊控制器的優(yōu)勢在于:當(dāng)存在多個線程組時铣墨,該控制器可以輕松切換室埋,只需要選擇對應(yīng)的取樣器,方便快捷,替代了創(chuàng)建很多測試計劃的繁瑣操作词顾。

PS03:任何一個模塊所用的控制器名字必須唯一八秃,因為其名字被用來找到目標(biāo)控制器時重新加載;出于這個原因肉盹,最好保證控制器名字不同昔驱,否則執(zhí)行測試時候可能發(fā)生意外。

PS04:模塊控制器與遠程測試不應(yīng)使用或非gui測試與工作臺部件上忍,因為工作臺測試元素并沒有測試計劃的一部分?jmx?文件骤肛。 任何這樣的測試就會失敗。

17)Runtime Controller?運行時間控制器

運行時間控制器窍蓝,設(shè)置控制器中的請求運行時間腋颠,單位:秒。

應(yīng)用場景:?對業(yè)務(wù)請求時間進行限制吓笙。

?配制說明: Runtime(seconds):?配制需要設(shè)置的運行時間淑玫,單位秒 。

18)While Controller?循環(huán)控制器

循環(huán)控制器面睛,與開發(fā)語言中的While功能一致絮蒿。直到條件為false時,停止運行叁鉴。

應(yīng)用場景:?循環(huán)執(zhí)行一個請求土涝,僅判斷一種狀態(tài)下退出循環(huán)。

配制說明: Condition(function or variable):?可配制為空/LAST/變量或方法 幌墓。

可能的條件值有:

? ? ? ? 空:最后一個示例循環(huán)失敗時退出循環(huán)但壮。

? ? ? ? LAST:最后一個示例循環(huán)失敗時退出循環(huán)。?如果之前的最后一個示例只是循環(huán)失敗,不進入循環(huán)常侣。

? ? ? ? false:退出時(或不輸入)循環(huán)條件等于字符串“?假?”蜡饵。

? ? ? ? 條件可以是任何變量或函數(shù),最終等于字符串”?假?”袭祟。需要注意的是:條件是評估兩次,一次取樣前,一次隨機取樣验残。

2.5監(jiān)聽器(Listener)

對測試結(jié)果進行處理和可視化展示的一系列組件,常用的有圖形結(jié)果巾乳、查看結(jié)果樹您没、聚合報告等。

添加監(jiān)聽器:查看結(jié)果樹

以上的五類原件(測試計劃胆绊、線程氨鹏、測試片段、控制器压状、監(jiān)聽器)就可以構(gòu)成一個簡單的性能測試腳本仆抵。

下面以訪問百度為例子寫一個測試的腳本跟继。

步驟:

1、打開jmeter镣丑,右擊測試計劃>添加線程組舔糖。

2、右擊線程組>添加邏輯控制器>簡單控制莺匠。

3金吗、右擊簡單控制器>添加sample>HTTP請求。

4趣竣、右擊線程組>添加監(jiān)聽器>查看結(jié)果樹摇庙。

5、點擊運行/綠色的運行按鈕>查看結(jié)果樹>HTTP請求顯示綠色為請求成功遥缕,紅色為請求失敗卫袒。

PS:不是顯示綠色就是請求成功了,還要檢查請求和響應(yīng)的數(shù)據(jù)是否正確单匣。最好的辦法的是通過添加斷言的方式來判斷夕凝。

斷言:用于檢查測試中得到的響應(yīng)數(shù)據(jù)等是否符合預(yù)期,Assertions一般用來設(shè)置檢查點封孙,用以保證性能測試過程中的數(shù)據(jù)交互與預(yù)期一致迹冤。

取樣器:HTTP請求參數(shù)填寫


監(jiān)聽器:查看結(jié)果樹
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末讽营,一起剝皮案震驚了整個濱河市虎忌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌橱鹏,老刑警劉巖膜蠢,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異莉兰,居然都是意外死亡挑围,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門糖荒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杉辙,“玉大人,你說我怎么就攤上這事捶朵≈┦福” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵综看,是天一觀的道長品腹。 經(jīng)常有香客問我,道長红碑,這世上最難降的妖魔是什么舞吭? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上羡鸥,老公的妹妹穿的比我還像新娘蔑穴。我一直安慰自己,他們只是感情好惧浴,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布澎剥。 她就那樣靜靜地躺著,像睡著了一般赶舆。 火紅的嫁衣襯著肌膚如雪哑姚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天芜茵,我揣著相機與錄音叙量,去河邊找鬼。 笑死九串,一個胖子當(dāng)著我的面吹牛绞佩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播猪钮,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼品山,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了烤低?” 一聲冷哼從身側(cè)響起肘交,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扑馁,沒想到半個月后涯呻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡腻要,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年复罐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雄家。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡效诅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出趟济,到底是詐尸還是另有隱情乱投,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布咙好,位于F島的核電站篡腌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏勾效。R本人自食惡果不足惜嘹悼,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一叛甫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杨伙,春花似錦其监、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至米死,卻和暖如春锌历,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背峦筒。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工究西, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人物喷。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓卤材,卻偏偏與公主長得像,于是被迫代替她去往敵國和親峦失。 傳聞我的和親對象是個殘疾皇子扇丛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容