JMeter性能測(cè)試必知必會(huì)知識(shí)系列1:JMeter基礎(chǔ)

1 JMeter基礎(chǔ)

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è)試以度量軟件的性能,也可以用于其他類(lèi)型的測(cè)試比如接口測(cè)試辫塌,API測(cè)試等漏策。

JMeter版本

JMeter不同的版本,功能有所差異臼氨,對(duì)JDK的支持也不盡相同掺喻。新的JMeter版本有些功能會(huì)逐漸改進(jìn)完善,還會(huì)引入新的功能組件,性能也會(huì)逐步提升。因此在JMeter官方網(wǎng)站的最佳實(shí)踐中储矩,建議用戶(hù)無(wú)論如何最好使用最新的JMeter版本感耙。

這里以最新的JMeter5.1.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è)試類(lèi)似于組裝一臺(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元素有以下四種類(lèi)型的測(cè)試元素:

1)測(cè)試計(jì)劃

2)線程組

3)組件

包含配置元件厚掷、定時(shí)器弟灼、前置處理器级解、后置處理器、斷言與監(jiān)聽(tīng)器

4)控制器

包括取樣器和邏輯控制器

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è)用戶(hù)(稱(chēng)之為虛擬用戶(hù))來(lái)執(zhí)行測(cè)試早处,可以通過(guò)修改線程組的線程數(shù)來(lái)實(shí)現(xiàn)湾蔓。比如將線程數(shù)設(shè)置為10,表示模擬10個(gè)用戶(hù)執(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è)元件都具有某種特定的功能怜校。比如“HTTP Request”取樣器元件,可以實(shí)現(xiàn)HTTP請(qǐng)求發(fā)送的功能注竿。

JMeter提供了很多元件茄茁,為了方便用戶(hù)使用與管理眾多的元件魂贬,JMeter將多個(gè)功能類(lèi)似或邏輯上相關(guān)的元件歸為一類(lèi),稱(chēng)為組件裙顽。JMeter包含六大組件: 配置元件付燥、定時(shí)器、前置處理器愈犹、后置處理器键科、斷言、監(jiān)聽(tīng)器漩怎。

配置元件

配置元件與取樣器密切相關(guān)勋颖。類(lèi)似于配置文件之于軟件,軟件配置文件可以影響軟件的行為勋锤;同樣通過(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í)行的图毕,某些情況下滿(mǎn)足了復(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í)行邏輯上有依賴(lài)關(guān)系的請(qǐng)求蛤虐,交替執(zhí)行請(qǐng)求等。

1.3 JMeter執(zhí)行順序與作用域

1.3.1 執(zhí)行順序

類(lèi)似于運(yùn)算符或操作符的優(yōu)先級(jí)肝陪,當(dāng)JMeter測(cè)試中包含多個(gè)不同的元素時(shí)驳庭,哪些元素先執(zhí)行,哪些元素后執(zhí)行氯窍,并不是嚴(yán)格按照它們出現(xiàn)的先后順序依次有序執(zhí)行的饲常,而是會(huì)遵循一定的內(nèi)部規(guī)則,我們稱(chēng)之為JMeter元素的執(zhí)行順序狼讨,一般情況下JMeter元素按照如下順序依次執(zhí)行:

0. 配置元件

1. 定時(shí)器

2. 前置處理器

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ù)中的元素可以分為兩類(lèi):層次結(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)百度為例(https://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ù)顯示如下:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市袱饭,隨后出現(xiàn)的幾起案子川无,更是在濱河造成了極大的恐慌,老刑警劉巖虑乖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懦趋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡疹味,警方通過(guò)查閱死者的電腦和手機(jī)仅叫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)糙捺,“玉大人诫咱,你說(shuō)我怎么就攤上這事『榈疲” “怎么了坎缭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)婴渡。 經(jīng)常有香客問(wèn)我幻锁,道長(zhǎng),這世上最難降的妖魔是什么边臼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮假消,結(jié)果婚禮上柠并,老公的妹妹穿的比我還像新娘。我一直安慰自己富拗,他們只是感情好臼予,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著啃沪,像睡著了一般粘拾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上创千,一...
    開(kāi)封第一講書(shū)人閱讀 51,198評(píng)論 1 299
  • 那天缰雇,我揣著相機(jī)與錄音,去河邊找鬼追驴。 笑死械哟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的殿雪。 我是一名探鬼主播暇咆,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了爸业?” 一聲冷哼從身側(cè)響起其骄,我...
    開(kāi)封第一講書(shū)人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扯旷,沒(méi)想到半個(gè)月后年栓,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡薄霜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年某抓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惰瓜。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡否副,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出崎坊,到底是詐尸還是另有隱情备禀,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布奈揍,位于F島的核電站曲尸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏男翰。R本人自食惡果不足惜另患,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛾绎。 院中可真熱鬧昆箕,春花似錦、人聲如沸租冠。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)顽爹。三九已至纤泵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間镜粤,已是汗流浹背捏题。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留繁仁,地道東北人涉馅。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像黄虱,于是被迫代替她去往敵國(guó)和親稚矿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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