一、Jmeter基礎(chǔ)概念-Jmeter基本元素總解

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?初識測試計劃與線程組

前言:

Jmeter是一項非常優(yōu)秀的,開源的性能測試工具。他的工作原理與其他工具的工作原理是一樣的,模擬用戶操作場景,通過負載發(fā)生器,以

多線程的方式進行運行腳本,最后收集測試過程中的數(shù)據(jù),生成報表數(shù)據(jù),分析系統(tǒng)性能。

一、性能工具的工作原理

Jmeter工具和其他性能工具在原理上完全一致,工具包含以下四個部分:

(1)負載發(fā)生器:用于產(chǎn)生負載,通常以多線程或是多進程的方式模擬用戶行為。

(2)用戶運行器:通常是一個腳本運行引擎,用戶運行器附加在線程或進程上,根據(jù)腳本要求模擬指定的用戶行為。

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

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

在了解了Jmeter的工作原理后,我們來認識一下,如何使用Jmeter工具來完成一次完整的性能測試,通過情況下,一次完整的性能測試要通過測試分析、測試準備,測試執(zhí)行、測試總結(jié)四個步驟。

二、Jmeter 測試計劃 的元素

2.1、測試計劃

任何測試計劃(test plan)的第一個元素,所有控制器(Controller)和取樣器(Sampler)必須作為線程組的子元素,其它元素,如監(jiān)聽器(Listener),可直接作為測試計劃的子元素,這種情況下,子元素將作用于所有線程組,如圖,圖形結(jié)果監(jiān)聽器作用于所有線程組

創(chuàng)建測試計劃



2.2 ?線程Threads(Users)


線程組主要用于控制執(zhí)行測試的線程數(shù)量,如圖,允許:

1) 設(shè)置線程數(shù)量

2) 設(shè)置ramp-up period

3) 設(shè)置執(zhí)行測試的次數(shù)


線程組版面

(1) 取樣錯誤后要執(zhí)行的動作

a.繼續(xù):默認選項,出錯后后續(xù)的線程繼續(xù)運行

b.Start Next Thread Loop:出錯后啟動下一組線程運行

c.停止線程:后續(xù)的線程停止運行,但是會返回出錯前的結(jié)果

d.停止測試:與停止線程的差異在于不返回出錯前的結(jié)果

(2)線程數(shù):虛擬用戶數(shù),代表發(fā)送請求的用戶數(shù),一個線程數(shù)占用一個進程或線程。


(3)Ramp-Up Period(in seconds)-準備時長

-所有線程在多少時間內(nèi)啟動,單位是秒,為0時代表一次請求即并發(fā)。如果線程數(shù)為30,Ramp-Up Period為2,由表示30個用戶線程在2s內(nèi)全部啟動,這個設(shè)置,讓用戶并發(fā)廣義上的并發(fā),也就是說是在2s內(nèi),這30個虛擬用戶,每個用戶以2/30s的間隔登錄系統(tǒng),達到多用戶并發(fā)在線的狀態(tài)。

TIPS:ramp-up period時間設(shè)置要適當(dāng),不能太短,防止測試開始時會產(chǎn)生過大的工作負載,也不能太長,必須保證最后一個線程在第一個線程結(jié)束之前開始運行(除非故意要那樣做).一般情況下,可設(shè)置Ramp-up period = 線程數(shù),在此基礎(chǔ)上,根據(jù)需要上下調(diào)整

2. 控制器(Controllers )

Jmeter擁有兩種類型的控制器:取樣器(Sampler)和邏輯控制器(Logical Controller),它們

線程啟動時間周期?

(4)循環(huán)次數(shù)

-每個線程發(fā)送請求的次數(shù)。如果線程數(shù)為30,循環(huán)次數(shù)為8,那么每個線程發(fā)送100次請求,那么此次的性能測試計劃共向應(yīng)用系統(tǒng)發(fā)送業(yè)務(wù)請求次數(shù)是30*100*8=24000次,以達到業(yè)務(wù)高請求。


線程組執(zhí)行 循環(huán)次數(shù)

(5)Delay Thread Creation until needed:直到需要時延遲線程的創(chuàng)建

(6)調(diào)度器:設(shè)定測試運行時間:比如,我們在要設(shè)置此線程組的執(zhí)行時長為30分鐘,我們可以設(shè)置腳本運行的開始時間及結(jié)束時間,在工具欄點擊啟動按鈕,此測試計劃便可按指定的時間執(zhí)行測試。


自動執(zhí)行測試腳本配置

2.3 控制器(Controllers )

Jmeter 擁有兩種類型的控制器:取樣器(Sampler)和邏輯控制器(Logical Controller)

Sampler:用于發(fā)送請求給服務(wù)器.例如,如果你想發(fā)送一個HTTP請求,添加一個“HTTP請求”Sampler,按它們出現(xiàn)在測試計劃tree視圖中的順序執(zhí)行Sampler。


http請求取樣器
JDBC請求取樣器

Sampler包含:

FTP Request

HTTP Request

JDBC Request

Java object request

LDAP Request

SOAP/XML-RPC Request

WebService (SOAP) Request

……

如果要發(fā)送多個相同類型的請求(比如,HTTP請求)到相同服務(wù)器,可考慮使用一個默認配置元件.

一個控制器有一個或多個缺省的默認元件。

記得添加一個監(jiān)聽器到測試計劃以便查看或存儲請求結(jié)果到磁盤.

添加Asertion到Sampler,查看Jmeter對請求響應(yīng)的基本驗證.例如,在web應(yīng)用壓測中,服務(wù)器

可能返回一個成功的"HTTP Response"的代碼,但是頁面可能有錯誤,或者缺失.你可以添加一

個assertion來檢查某些html標簽(tag),符串等.(可用正則表達式)


Logical Controller:用于自定義發(fā)送請求的邏輯.例如,可以添加一個交替邏輯控制器(Interleave Logic Controller)來交替使用兩個“HTTP請求”Sampler

2.4. 邏輯控制器(Logic Controller )

Logical Controller用于自定義發(fā)送請求的邏輯,可改變它的子元素的請求順序,重復(fù)次數(shù)等.


Logic Controller?

首先,僅一次控制器(Once Only Controller)控制登錄請求僅被執(zhí)行一次,后續(xù)的迭代將跳過登錄請求的執(zhí)行

登錄后,下一個Sampler將加載搜索頁面(設(shè)想用戶登錄web應(yīng)用后,轉(zhuǎn)到搜索頁面進行搜索),

加載搜索頁面后,我們進行搜索,實際上,我們想進行兩次不同的搜索。然而,每次搜索完成我

們都想重新加載搜索頁面,本可通過4個簡單的HTTP請求Sampler(加載搜索頁面,搜索“A”,

加載搜索頁面,搜索“B”)來做這件事,取而代之,我們使用交替控制器(InterleaveController),它元素順序,每次執(zhí)行一個請求

注意:交替控制器的子元素--HTTP請求默認值.設(shè)想搜索"A"和搜索"B"共享統(tǒng)一的PATH信息(一個HTTP請求規(guī)格包含domain, port, method, protocol, path, and arguments, 加其它可選項).兩個都是搜索請求,訪問相同的后臺搜索引擎.與其在兩個”HTTP請求”Sampler的PATH

輸入域中配置相同的信息,不如抽取那些相同的信息到單一配置元件中。當(dāng)交替控制器執(zhí)行搜索“A”或搜索“B”請求Smapler時,它將”HTTP請求默認值”Sampler中PATH輸入域的值填寫到

搜索請求Sampler中對應(yīng)輸入域。所以,我們保留PATH輸入域為空,并把信息放到HTTP請求默認值配置元件中。

下一個元素為另一個”HTTP默認請求值”,添加到線程組,作為其子元素.線程組有個內(nèi)置的邏輯

控制器,保證它可以正確使用配置元件。它可填補任意請求Sampler的PATH空白.在web測試中

保留所有HTTPqi Sampler元素的DOMAIN輸入域為空白,取而代之,把那些信息放入添加到線程

組的“HTTP默認請求值”元件,這樣做,僅改變一個輸入域,就可以在不同服務(wù)器上測試你的應(yīng)用程序,否則,你每次都必須編輯每個取樣器.

最后的元素為HTTP Cookie Manager.Cookie Manager必須添加到所有web測試中,否則,Jmeter將忽略cookie.在線程組中添加cookie管理器,確保所有HTTP請求取樣器共享相同的cookie邏輯控制器可以混用來實現(xiàn)不同的結(jié)果。查看內(nèi)置邏輯控制器列表

2.5. 測試片段(Test Fragments)

Test Fragment為一種特殊類型的控制器,和tree視圖中和線程組處在同一層次。和線程組不同的是,除非被模塊控制器(Module Controller)或者包含控制器(Include_Controller)引用,否則不會被執(zhí)行


Test Fragments

2.6. 監(jiān)聽器(Listeners)

Listeners提供對Jmeter在運行測試案例時采集的信息訪問.圖形結(jié)果樹(Graph Results)監(jiān)聽器在圖形上繪制響應(yīng)時間;“查看結(jié)果樹(View Results Tree)”監(jiān)聽器顯示request和response取樣器的詳細信息,且可展示基于HTML和XML的響應(yīng)表現(xiàn)形式.其它監(jiān)聽器提供,摘要或匯總信——此外,監(jiān)聽器可指示保存數(shù)據(jù)到一個文件,供后續(xù)使用。每個監(jiān)聽器提供一個輸入域來填寫,保存數(shù)據(jù)的文件

2.7?定時器(Timers )

Jmeter不間斷的線程發(fā)送每個請求。建議添加一個定時器到線程組,來設(shè)置一個延遲。如果你不添加延遲,Jmeter可能在一段很短的時間內(nèi)制造大量請求壓倒服務(wù)器.定時器將導(dǎo)致Jmeter在發(fā)送定時器作用范圍內(nèi)的每個sampler前等待一段時間。如果添加多于一個定時器到線程組,Jmeter采用定時器的設(shè)置的延遲時間的總和,執(zhí)行每個請求取樣器前等待一段時間,該時間為前面的時間總合。定時器可以添加到sampler或controller以約束他們要影響的sampler.

為了在測試計劃中的某個單一位置,提供一個等待,可用Test Action Sampler.


Timer定時器

2.8. 斷言(Assertions )

斷言允許你預(yù)測從被測服務(wù)器接收的真實結(jié)果.使用斷言,可測試你的應(yīng)用程序是否返回你要的結(jié)果.


例如,你可以預(yù)測查詢返回包含一些特定文本.用于檢測的文本可以是Perl類型的正則表達式,

你可以指示返回包含這些文本,或者是設(shè)置的文本匹配整個響應(yīng).

可添加斷言到任意Sampler,例如,可添加檢測文本“”的斷言到HTTP請求。Jmeter將

檢測文本是否在HTTP響應(yīng)中。如果Jmeter找不到文本,將標記請求失敗。

注意:斷言作用于它的作用范圍內(nèi)的所有取樣器.可把斷言作為子元素添加到單個Sampler來限制斷言僅作用于某個單一Sampler

為了查看斷言結(jié)果,添加一個Assertion監(jiān)聽器到線程組。失敗的斷言也會顯示在Tree視圖(Tree View)和Table Listener中,例如,在匯總和摘要報告中,將統(tǒng)計錯誤%age


9. 配置元件(Configuration Elements )

配置元件和Sampler緊密合作。它不發(fā)送請求[HTTP(S) Test Script Recorder除外],一個配置元件可被它所處的tree分支下的元素訪問.


例如,如果你把一個HTTP Cookie Manager放在一個簡單邏輯控制器下,該HTTP Cookie Manager僅能被該簡單邏輯控制器的HTTP請求訪

問(見figure 1)--可被HTTP請求"Web Page 1" 和"Web Page 2"訪問,但不能被"Web Page 3"訪問.

此外,在一個tree分支內(nèi)的元素比位于“父”分支的相同元素的優(yōu)先級高.例如,我們定義了兩個HTTP請求默認值元件,"Web Defaults 1"和"Web Defaults 2". 由于我們把 "Web Defaults1"放在一個循環(huán)控制器內(nèi)(loop controller),僅"Web Page 2"可訪問它.其它HTTP requests

將使用"Web Defaults 2", 因為它放在線程組(所有tree分支的“父”分支)User Defined Variables元件則不一樣,不管它在哪個地方,測試開始時被執(zhí)行,為了簡單起見,建議把它放在線程組開頭.


配置原件

10. 前置處理器(Pre-Processor Elements )

一個Pre-Processor優(yōu)先于Sampler Request.如果一個Pre-Processor關(guān)聯(lián)到一個Sampler,那么它優(yōu)先于sampler運行. Pre-Processor最經(jīng)常用來修改Sampler請求的的設(shè)置或更新非來字響應(yīng)文本的變量.



Pre-Processor Elements

11. 后置處理器 (Post-Processor Elements )

比Sampler Request后執(zhí)行。常用來處理響應(yīng)數(shù)據(jù)或從中提取值



Post-Processor Elements?

12. 執(zhí)行順序 (Execution order )

0 配置元件

2 前置處理器

3 定時器

4 Sampler

5 后置處理器(除非取樣器請求結(jié)果為空)

6 斷言(除非取樣器請求結(jié)果為空)

7 監(jiān)聽器(除非取樣器請求結(jié)果為空)

注意:定時器,斷言,前、后置處理器僅在有Sampler的情況下才被執(zhí)行,Logic Controllers 和

Samplers按tree視圖中的順序執(zhí)行。其它元素依據(jù)他們的所處的作用域范圍和類型進行處理,

同種類型的元素按他們出現(xiàn)在tree視圖的順序進行處理

例如

Controller

Post-Processor 1

Sampler 1

Sampler 2

Timer 1

Assertion 1

Pre-Processor 1

Timer 2

Post-Processor 2

執(zhí)行順序為:

Pre-Processor 1

Timer 1

Timer 2

Sampler 1

Post-Processor 1

Post-Processor 2

Assertion 1

Pre-Processor 1

Timer 1

Timer 2

Sampler 2

Post-Processor 1

Post-Processor 2

Assertion 1

13. (作用范圍 Scoping Rules )

JMeter測試樹包含的元素是分層次和有序的。一些元素有嚴格的層次之分(Listeners, ConfigElements, Post-Procesors, Pre-Processors, Assertions, Timers),一些有順序之分 (controllers, samplers).當(dāng)創(chuàng)建測試計劃時,創(chuàng)建有序取樣器請求列表 (通過 Sampler)


Scoping Rules說明


代表將要執(zhí)行的一系列步驟。通常在controller內(nèi)按順序組織這些請求: ?執(zhí)行順序為:One,Two, Three, Four

一些controller影響他們子元素的順序,可以查看具體controller說明 the component ?reference .其它元素是分層的。

比如,Assertion.如果它的父元素是個請求,那么它作用于那個請求,如果是個控制器,那么它作用于控制器下的所有子請求元素

Assertion #1作用于One,而Assertion作用域Two,Three

另一個例子,定時器

請求根據(jù)他們將被執(zhí)行的順序進行命名. Timer #1作用于Two, Three和Four . Assertion #1

僅作用于Three. Timer #2影響所有請求.

14. 屬性和變量 (Properties and Variables )

JMeter properties定義在jmeter.properties (see Configuring JMeter for more

details).

屬性對Jmeter來說是全局的,主要用于定義一些缺省的Jmeter使用設(shè)置.例如,屬性

remote_hosts定義Jmeter將遠程運行的服務(wù)器.屬性可以被定義在測試計劃中--見Functions

- read a property - 但不是用于指定線程的值.

Jmeter為針對每個線程來說是局部的.對每個線程來說可能是相同的,也可能是不同的。如果某

個變量被線程更新,僅該線程變量的拷貝被更改。例如,正在表達式提取器后置處理器(Regular Expression Extractor Post-Processor)根據(jù)它的線程讀取的sample設(shè)置變量值,這些變量值可供后續(xù)的其它線程使用。關(guān)于怎么引用變量和函數(shù)的更詳細信息查看Functions and Variables

注意:測試計劃中定義的變量和User Defined Variables配置元件,在啟動時就對提供給整個測試計劃. 如果多個UDV元素定義了相同變量,那么最后一個起作用。一旦啟動線程,變量的初始設(shè)置被拷貝到每個線程.其它元素例如用戶參數(shù)前置處理器(User Parameters Pre-Processor)或正則表達式后置處理器,可用來重定義變量或創(chuàng)建新的變量.這些重定義僅作用于當(dāng)前線程.

setProperty函數(shù)可用于定義一個Jmeter屬性。對測試計劃來說是全局的,在不同線程之間傳

遞信息.

變量和屬性都是大小寫敏感的。

15. 使用變量進行參數(shù)化測試 (Using Variables to parameterise tests )

例如,在測試中定義如下變量

HOST www.example.com

THREADS 10

LOOPS 20

可在測試計劃中以${HOST} ${THREADS}等方式引用它們。如果你稍后想改變host,僅改變HOST

變量對應(yīng)的值即可。變量值的少時,這很有效,當(dāng)數(shù)量多時則需要用屬性來定義變量的值,例如

HOST ${__P(host,www.example.com)}

THREADS ${__P(threads,10)}

LOOPS ${__P(loops,20)}

可命令行方式改變一些變量或所有變量的值,如下:

jmeter ... -Jhost=www3.example.org -Jloops=13

參考連接:

http://jmeter.apache.org/usermanual/test_plan

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在使用Jmeter進行接口的性能測試時,由于Jmeter 是JAVA應(yīng)用,對于CPU和內(nèi)存的消耗比較大,所以,當(dāng)需...
    燕京博士閱讀 4,300評論 0 16
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,872評論 25 709
  • 我總是自命清高, 不愿為了那份口糧而折腰。 可生活就是這么殘酷, 往往把那份顧慮都打消。 因為生存面前一切的借口都...
    琢玉書生閱讀 236評論 4 5
  • 5月14日 參加上海行動派的#國際女性精英論壇# 5月14日 體驗金茂大廈頂樓云中漫步 有別于自己遠隔不同的城市飛...
    有IDEA閱讀 258評論 0 1
  • UIAlertView * alertView = [[UIAlertView alloc] initWithTi...
    iCloudEnd閱讀 490評論 0 2

友情鏈接更多精彩內(nèi)容