一、Jmeter基礎概念-Jmeter基本元素總解

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

前言:

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

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

一、性能工具的工作原理

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

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

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

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

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

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

二、Jmeter 測試計劃 的元素

2.1、測試計劃

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

創建測試計劃



2.2 ?線程Threads(Users)


線程組主要用于控制執行測試的線程數量,如圖,允許:

1) 設置線程數量

2) 設置ramp-up period

3) 設置執行測試的次數


線程組版面

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

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

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

c.停止線程:后續的線程停止運行,但是會返回出錯前的結果

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

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


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

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

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

2. 控制器(Controllers )

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

線程啟動時間周期?

(4)循環次數

-每個線程發送請求的次數。如果線程數為30,循環次數為8,那么每個線程發送100次請求,那么此次的性能測試計劃共向應用系統發送業務請求次數是30*100*8=24000次,以達到業務高請求。


線程組執行 循環次數

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

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


自動執行測試腳本配置

2.3 控制器(Controllers )

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

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


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

Sampler包含:

FTP Request

HTTP Request

JDBC Request

Java object request

LDAP Request

SOAP/XML-RPC Request

WebService (SOAP) Request

……

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

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

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

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

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

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


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

2.4. 邏輯控制器(Logic Controller )

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


Logic Controller?

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

登錄后,下一個Sampler將加載搜索頁面(設想用戶登錄web應用后,轉到搜索頁面進行搜索),

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

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

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

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

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

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

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

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

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

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

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

2.5. 測試片段(Test Fragments)

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


Test Fragments

2.6. 監聽器(Listeners)

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

2.7?定時器(Timers )

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

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


Timer定時器

2.8. 斷言(Assertions )

斷言允許你預測從被測服務器接收的真實結果.使用斷言,可測試你的應用程序是否返回你要的結果.


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

你可以指示返回包含這些文本,或者是設置的文本匹配整個響應.

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

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

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

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


9. 配置元件(Configuration Elements )

配置元件和Sampler緊密合作。它不發送請求[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分支內的元素比位于“父”分支的相同元素的優先級高.例如,我們定義了兩個HTTP請求默認值元件,"Web Defaults 1"和"Web Defaults 2". 由于我們把 "Web Defaults1"放在一個循環控制器內(loop controller),僅"Web Page 2"可訪問它.其它HTTP requests

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


配置原件

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

一個Pre-Processor優先于Sampler Request.如果一個Pre-Processor關聯到一個Sampler,那么它優先于sampler運行. Pre-Processor最經常用來修改Sampler請求的的設置或更新非來字響應文本的變量.



Pre-Processor Elements

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

比Sampler Request后執行。常用來處理響應數據或從中提取值



Post-Processor Elements?

12. 執行順序 (Execution order )

0 配置元件

2 前置處理器

3 定時器

4 Sampler

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

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

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

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

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

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

例如

Controller

Post-Processor 1

Sampler 1

Sampler 2

Timer 1

Assertion 1

Pre-Processor 1

Timer 2

Post-Processor 2

執行順序為:

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).當創建測試計劃時,創建有序取樣器請求列表 (通過 Sampler)


Scoping Rules說明


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

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

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

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

另一個例子,定時器

請求根據他們將被執行的順序進行命名. 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使用設置.例如,屬性

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

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

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

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

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

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

遞信息.

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

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

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

HOST www.example.com

THREADS 10

LOOPS 20

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

變量對應的值即可。變量值的少時,這很有效,當數量多時則需要用屬性來定義變量的值,例如

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容

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