1.1 JMeter概述
JMeter簡(jiǎn)介
Apache JMeter?是Apache組織開(kāi)發(fā)的一款開(kāi)源軟件,是典型的純Java開(kāi)發(fā)的應(yīng)用程序掉分,可以在不同平臺(tái)比如Windows、Linux或macOS系統(tǒng)上進(jìn)行軟件測(cè)試颈抚。JMeter主要用于應(yīng)用程序的功能負(fù)載測(cè)試以度量軟件的性能读虏,也可以用于其他類型的測(cè)試比如接口測(cè)試,API測(cè)試等墨缘。
JMeter版本
JMeter不同的版本星虹,功能有所差異零抬,對(duì)JDK的支持也不盡相同。新的JMeter版本有些功能會(huì)逐漸改進(jìn)完善,還會(huì)引入新的功能組件,性能也會(huì)逐步提升宽涌。因此在JMeter官方網(wǎng)站的最佳實(shí)踐中叉抡,建議用戶無(wú)論如何最好使用最新的JMeter版本偿荷。
這里以最新的JMeter5.2.1版本進(jìn)行介紹。
JMeter GUI 界面
當(dāng)JMeter以GUI模式運(yùn)行時(shí),窗口主要由三部分構(gòu)成:
1.功能區(qū)
上方菜單欄宇攻,下方工具欄叹哭。菜單欄展示了JMeter提供的功能菜單晰绎,而工具欄中的圖標(biāo)是常見(jiàn)功能的快捷方式彼硫。
2.視圖區(qū)
以樹(shù)狀結(jié)構(gòu)呈現(xiàn)JMeter元素,其中“Test Plane”是樹(shù)的根節(jié)點(diǎn)溶诞,每一個(gè)節(jié)點(diǎn)就是一個(gè)JMeter元素鸯檬。
在此區(qū)域可以添加、刪除節(jié)點(diǎn)螺垢,或者通過(guò)拖曳調(diào)整節(jié)點(diǎn)的位置喧务。
3.內(nèi)容區(qū)
在視圖區(qū)選中一個(gè)JMeter元素節(jié)點(diǎn),相應(yīng)地在內(nèi)容區(qū)則會(huì)顯示該元素的內(nèi)容甩苛□彘梗可以對(duì)其內(nèi)容進(jìn)行查看、設(shè)置等操作讯蒲。
1.2 JMeter測(cè)試組成
JMeter構(gòu)建測(cè)試類似于組裝一臺(tái)智能電子設(shè)備痊土,比如智能手機(jī)。智能手機(jī)由CPU墨林、內(nèi)存赁酝、輸入輸出設(shè)備(比如USB接口,攝像頭等)旭等、屏幕酌呆、電池等一系列物理部件構(gòu)成的。
JMeter測(cè)試也是由一系列JMeter元素組合起來(lái)構(gòu)成的搔耕,JMeter提供了構(gòu)建測(cè)試的所有元素隙袁,你可以隨心所欲的將這些元素組裝起來(lái)完成你想要的測(cè)試。
JMeter元素有以下四種類型的測(cè)試元素:
1)測(cè)試計(jì)劃
2)線程組
3)組件
包含配置元件弃榨、定時(shí)器菩收、前置處理器、后置處理器鲸睛、斷言與監(jiān)聽(tīng)器
4)控制器
包括取樣器娜饵、邏輯控制器與測(cè)試片斷
1.2.1 測(cè)試計(jì)劃
測(cè)試計(jì)劃描述了JMeter測(cè)試在運(yùn)行時(shí)執(zhí)行的一系列步驟。完整的測(cè)試計(jì)劃由一個(gè)或多個(gè)線程組官辈、邏輯控制器箱舞、取樣器遍坟、監(jiān)聽(tīng)器、定時(shí)器晴股、斷言和配置元件組成愿伴。
測(cè)試計(jì)劃元素是JMeter測(cè)試樹(shù)的根節(jié)點(diǎn),是唯一的电湘,所有的測(cè)試元素節(jié)點(diǎn)都位于根節(jié)點(diǎn)之下公般。
1.2.2 線程組
在手工測(cè)試中,測(cè)試用例由測(cè)試工程師手動(dòng)執(zhí)行完成胡桨。而性能測(cè)試與自動(dòng)化測(cè)試的測(cè)試用例由選擇的測(cè)試工具代替測(cè)試工程師來(lái)執(zhí)行。JMeter執(zhí)行測(cè)試的任務(wù)是由線程組來(lái)完成的瞬雹。打個(gè)比方昧谊,線程組相當(dāng)于手工測(cè)試中執(zhí)行測(cè)試用例的測(cè)試工程師。
線程組控制JMeter用來(lái)執(zhí)行測(cè)試的線程數(shù)酗捌。要模擬多少個(gè)用戶(稱之為虛擬用戶)來(lái)執(zhí)行測(cè)試呢诬,可以通過(guò)修改線程組的線程數(shù)來(lái)實(shí)現(xiàn)。比如將線程數(shù)設(shè)置為10胖缤,表示模擬10個(gè)用戶執(zhí)行測(cè)試尚镰。
所有的取樣器與邏輯控制器都必須位于線程組下,從這個(gè)角度理解哪廓,JMeter測(cè)試計(jì)劃真正開(kāi)始于線程組狗唉。其他元素,例如監(jiān)聽(tīng)器涡真,可以直接放在測(cè)試計(jì)劃下分俯,在這種情況下,它們將作用于所有的線程組哆料。
一個(gè)測(cè)試計(jì)劃下可以有多個(gè)線程組缸剪,在測(cè)試計(jì)劃中可以配置以并行或順序方式啟動(dòng)多個(gè)線程組。
1.2.3 組件
JMeter中最基本的元素為元件东亦,元件是JMeter測(cè)試中的最小功能單元杏节,每個(gè)元件都具有某種特定的功能。比如“Response Assertion”斷言元件典阵,可以實(shí)現(xiàn)對(duì)請(qǐng)求或響應(yīng)是否預(yù)期的驗(yàn)證奋渔。
JMeter提供了很多元件,為了方便用戶使用與管理眾多的元件萄喳,JMeter將多個(gè)功能類似或邏輯上相關(guān)的元件歸為一類卒稳,稱為組件。JMeter包含六大組件: 配置元件他巨、定時(shí)器充坑、前置處理器减江、后置處理器、斷言捻爷、監(jiān)聽(tīng)器辈灼。
- 配置元件
配置元件與取樣器密切相關(guān)。類似于配置文件之于軟件也榄,軟件配置文件可以影響軟件的行為巡莹;同樣通過(guò)配置元件可以新增或修改請(qǐng)求內(nèi)容,實(shí)現(xiàn)對(duì)請(qǐng)求的自定義甜紫。
- 定時(shí)器
默認(rèn)情況下降宅,JMeter線程按順序執(zhí)行取樣器而不會(huì)出現(xiàn)暫停的情況。通過(guò)將定時(shí)器添加到線程組來(lái)指定延遲囚霸。如果不加延遲腰根,JMeter可能會(huì)在很短的時(shí)間內(nèi)發(fā)送過(guò)多的請(qǐng)求到服務(wù)器,導(dǎo)致服務(wù)器負(fù)載過(guò)重而崩潰拓型。
定時(shí)器可以使在其作用范圍內(nèi)的每個(gè)取樣器執(zhí)行前延遲一段時(shí)間额嘿。
- 前置處理器
前置處理器在進(jìn)行取樣器請(qǐng)求之前執(zhí)行一些操作。
如果前置處理器附加到取樣器元素劣挫,那么它將在該取樣器元素運(yùn)行之前執(zhí)行册养。
前置處理器經(jīng)常用于在運(yùn)行之前修改取樣器請(qǐng)求的設(shè)置,或更新未從響應(yīng)文本中提取的變量压固。
- 后置處理器
后置處理器在取樣器請(qǐng)求完成后執(zhí)行一些操作球拦。
如果后置處理器附加到取樣器元素,那么它將在該取樣器元素運(yùn)行之后執(zhí)行帐我。
后處理器通常用于處理響應(yīng)數(shù)據(jù)刘莹,從中提取需要的值。
- 斷言
斷言用于驗(yàn)證取樣器請(qǐng)求或?qū)?yīng)的響應(yīng)是否返回了期望的結(jié)果焚刚。
JMeter測(cè)試是否執(zhí)行成功点弯,結(jié)果是否預(yù)期,都可以通過(guò)添加斷言來(lái)進(jìn)行驗(yàn)證矿咕。
- 監(jiān)聽(tīng)器
監(jiān)聽(tīng)器可以在JMeter執(zhí)行測(cè)試的過(guò)程中搜集相關(guān)的數(shù)據(jù)抢肛,并將這些數(shù)據(jù)不同的形式,比如樹(shù)碳柱、圖捡絮、報(bào)告等呈現(xiàn)出來(lái)。
比如莲镣,“圖形結(jié)果”監(jiān)聽(tīng)器繪制響應(yīng)時(shí)間的曲線圖福稳,“查看結(jié)果樹(shù)”監(jiān)聽(tīng)器顯示取樣器請(qǐng)求和響應(yīng)的詳細(xì)信息等。
此外瑞侮,有些監(jiān)聽(tīng)器還可以將搜集到的測(cè)試數(shù)據(jù)保存到文件中以供以后使用的圆。
1.2.4 控制器
- 取樣器
取樣器用于構(gòu)建發(fā)給服務(wù)器處理的請(qǐng)求鼓拧,即告訴JMeter怎樣將請(qǐng)求發(fā)送到服務(wù)器。例如越妈,若要發(fā)送HTTP請(qǐng)求季俩,可以選擇“HTTP Request”取樣器,同時(shí)還可以通過(guò)添加配置元件來(lái)自定義請(qǐng)求梅掠。
- 邏輯控制器
取樣器請(qǐng)求默認(rèn)是以先后順序依次執(zhí)行的酌住,某些情況下滿足了復(fù)雜的業(yè)務(wù)/場(chǎng)景需求。通過(guò)邏輯控制器可以控制JMeter發(fā)送請(qǐng)求的邏輯阎抒,來(lái)實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)/場(chǎng)景酪我。比如有選擇性執(zhí)行某些請(qǐng)求,循環(huán)執(zhí)行請(qǐng)求且叁,整體執(zhí)行邏輯上有依賴關(guān)系的請(qǐng)求祭示,交替執(zhí)行請(qǐng)求等。
1.3 JMeter執(zhí)行順序與作用域
1.3.1 執(zhí)行順序
類似于運(yùn)算符或操作符的優(yōu)先級(jí)谴古,當(dāng)JMeter測(cè)試中包含多個(gè)不同的元素時(shí),哪些元素先執(zhí)行稠歉,哪些元素后執(zhí)行掰担,并不是嚴(yán)格按照它們出現(xiàn)的先后順序依次有序執(zhí)行的,而是會(huì)遵循一定的內(nèi)部規(guī)則怒炸,我們稱之為JMeter元素的執(zhí)行順序带饱,一般情況下JMeter元素按照如下順序依次執(zhí)行:
0. 配置元件
1. 前置處理器
2. 定時(shí)器
3. 取樣器
4. 后置處理器
5. 斷言
6. 監(jiān)聽(tīng)器
一個(gè)簡(jiǎn)單的例子:
其中①為取樣器、②為配置元件阅羹、③為定時(shí)器勺疼、④為監(jiān)聽(tīng)器、⑤為前置處理器捏鱼、⑥為后置處理器执庐、⑦為斷言。
執(zhí)行順序?yàn)椋孩?->⑤-->③-->①-->⑥-->⑦-->④
1.3.2 作用域
JMeter測(cè)試樹(shù)中的元素可以分為兩類:層次結(jié)構(gòu)與順序結(jié)構(gòu)
層次結(jié)構(gòu)的元素包括:配置元件导梆、定時(shí)器轨淌、前置處理器、后置處理器看尼、斷言與監(jiān)聽(tīng)器递鹉;
順序結(jié)構(gòu)的元素包括:取樣器和邏輯控制器。
一般而言順序結(jié)構(gòu)的元素沒(méi)有作用域的概念藏斩,而作用域只針對(duì)具有層次結(jié)構(gòu)的組件躏结。
JMeter作用域就是組件對(duì)取樣器有效的區(qū)域,在這個(gè)區(qū)域內(nèi)組件是起作用的狰域。
層次結(jié)構(gòu)的元素作用域
具有層次結(jié)構(gòu)的元素的作用域規(guī)則如下:
(1)若其父節(jié)點(diǎn)為取樣器媳拴,則其只對(duì)該取樣器起作用黄橘;
(2)若其父節(jié)點(diǎn)為邏輯控制器,則會(huì)影響邏輯控制器下的所有取樣器禀挫;
(3)若其父節(jié)點(diǎn)為線程組旬陡,則會(huì)影響線程組下的所有取樣器;
(4)若其父節(jié)點(diǎn)為測(cè)試計(jì)劃语婴,則會(huì)影響測(cè)試計(jì)劃下的所有取樣器描孟。
一些例子:
1.父節(jié)點(diǎn)為取樣器
-Test Plan
-Thread Group
HTTP Request1
Response Assertion
View Results Treel
HTTP Request2
View Results Tree2
解析:
“Response Assertion”斷言的父節(jié)點(diǎn)為“HTTP Request1”取樣器,則只會(huì)對(duì)“HTTP Request1”進(jìn)行斷言砰左,不會(huì)斷言“HTTP Request2”取樣器匿醒。
2.父節(jié)點(diǎn)為邏輯控制器
-Test Plan
-Thread Group
-Loop Controller
Response Assertion
-HTTP Request1
View Results Treel
-HTTP Request2
View Results Tree2
解析:
“Response Assertion”斷言的父節(jié)點(diǎn)為“Loop Controller”邏輯控制器,“Response Assertion”會(huì)對(duì)邏輯控制下的“HTTP Request1”取樣器和“HTTP Request2”取樣器進(jìn)行斷言缠导。
3.父節(jié)點(diǎn)為線程組
-Test Plan
-Thread Group
Response Assertion
-HTTP Request1
View Results Treel
-Loop Controller
-HTTP Request2
View Results Tree2
-HTTP Request3
View Results Tree3
解析:
“Response Assertion”斷言的父節(jié)點(diǎn)為“Thread Group”線程組廉羔,“Response Assertion”會(huì)對(duì)線程組下的“HTTP Request1”取樣器、“HTTP Request2”取樣器與“HTTP Request3”取樣器進(jìn)行斷言僻造。
4.父節(jié)點(diǎn)為測(cè)試計(jì)劃
-Test Plan
Response Assertion
-Thread Groupl
-HTTP Request1
View Results Treel
-Loop Controller
-HTTP Request2
View Results Tree2
-Thread Group2
-HTTP Request3
View Results Tree3
解析:
“Response Assertion”斷言的父節(jié)點(diǎn)為“Test Plan”測(cè)試計(jì)劃憋他,“Response Assertion”會(huì)對(duì)測(cè)試計(jì)劃下的“HTTP Request1”取樣器、“HTTP Request2”取樣器與“HTTP Request3”進(jìn)行斷言髓削。
1.4 一個(gè)簡(jiǎn)單的JMeter測(cè)試計(jì)劃
以訪問(wèn)百度為例(www.baidu.com)竹挡。
按照如下步驟完成測(cè)試計(jì)劃:
1.在Test Plan節(jié)點(diǎn)上右鍵,選擇Add->Treads(users)->Thread Group
在Tread Properties項(xiàng)下立膛,設(shè)置“Number of Threads(users)”為1
2.在Thread Group節(jié)點(diǎn)上右鍵揪罕,選擇Add->Sampler->HTTP Request
在Web Server項(xiàng)下,設(shè)置“Server Name or IP”為www.baidu.com
在HTTP Request項(xiàng)下宝泵,設(shè)置“Path”為/
3.在HTTP Request節(jié)點(diǎn)上右鍵好啰,選擇Add->Assertions->Response Assertion
在Field to Test項(xiàng)下,選擇“Response Code”
在“Patterns to Test”項(xiàng)下儿奶,點(diǎn)擊“Add”框往,輸入200
4.繼續(xù)在HTTP Request節(jié)點(diǎn)上右鍵,選擇Add->Listener->View Results Tree
5.點(diǎn)擊“Save”快捷按鈕闯捎,然后輸入測(cè)試計(jì)劃文件名搅窿,保存
6.點(diǎn)擊“Start”快捷按鈕執(zhí)行測(cè)試,可以在“View Results Tree”中查看測(cè)試結(jié)果隙券。
JMeter測(cè)試查看結(jié)果樹(shù)顯示如下: