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

? ? ? ? 應項目組要求對負責的搜索平臺做性能測試,當時測試組前輩推薦使用jmeter,和jmeter由此結緣。當然學習過程中,知識儲備少,也順帶學習了很多其他相關的知識。這篇博客,是將平時學習的關于jmeter一些皮毛基礎和使用技巧整合下來,方便自己回顧的同時方便其他同行參考。

一、優點

1、開源工具,可擴展性非常好。

2、高可擴展性,用戶可自定義調試相關模塊代碼。

3、精心簡單的GUI設計,小巧靈活。

4、完全的可移植性和100%純java。

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

6、完全多線程框架,允許通過多個線程并發取樣以及單獨的線程對不同的功能同時取樣。

7、支持腳本取樣器。

二、安裝及下載

jmeter官網下載URL:Apache JMeter - Download Apache JMeter,目前最新版本是5.0版本,jmeter本身不需要安裝,只需要配置好JDK環境,然后在在jmeter文件中的bin文件中打開jmeter.bat文件即可。最新版本,建議配置的JDK最好用1.8及以上版本。

JDK官網下載URL:Java SE Development Kit 8 - Downloads

jmeter官網學習文檔URL:Apache JMeter - User's Manual

三、基礎構成

1、組成部分

1)負載發生器:產生負載,多進程或多線程模擬用戶行為。

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

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

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

2、基本概念

添加線程組

2.1測試計劃(test plan)

描述一個性能測試,包含本次測試所有相關功能。

2.2.threads(users)線程

Setup thread group:一種特殊類型的線程,可用于執行預測試操作。即執行測試前進行定期線程組的執行。

Teardown thread group:一種特殊類型的線程,可用于執行測試后動作。即執行測試結束后執行定期的線程組。

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

2.3測試片段(test fragment)

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

2.4控制器

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

作用是用這些原件驅動處理一個測試。

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

1)取樣器(Sampler)

性能測試中向服務器發送請求,記錄響應信息,記錄響應時間的最小單元,jmeter原生支持多種不同的的sample,

如?HTTP?Request?Sampler?、?FTP??Request?Sampler 、TCP??Request?Sampler 、JDBC?Request?Sampler?等。

每一種不同類型的?sampler?可以根據設置的參數向服務器發出不同類型的請求。

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

2)邏輯控制器(Logic Controller)

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

意思是說,邏輯控制器可以控制采樣器(samplers)的執行順序。由此可知,控制器需要和采樣器一起使用,否則控制器就沒有什么意義了。放在控制器下面的所有的采樣器都會當做一個整體,執行時也會一起被執行。

邏輯控制器包含兩類原件:一類是控制Test Plan中Sampler節點發送請求的邏輯順序控制器,例如If Controller、Swith Controller、Loop Controller、Random Controller等。另一類是用來組織和控制Sampler節點的,即對測試計劃中的腳本進行分組、方便JMeter統計執行結果以及進行腳本的運行時控制等,例如Transaction Controller、Throughput Controller等。

jmeter控制器之一:

3)簡單控制器(Simple Controller

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

4)循環控制器(Loop Controller)

可以理解為:循環該控制器下子節點的次數。

線程組里循環次數設置了n次,循環控制器下的循環次數也設置了m次,則該控制器下的請求運行的次數是(n*m)次。

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

在測試計劃執行期間,該控制器下的子結點對每個線程只執行一次,登錄場景經常會使用到這個控制器。

PS:將Once Only Controller作為Loop Controller的子節點,Once Only Controller在每次循環的第一次迭代時均會被執行。

6)ForEach控制器(ForEach Controller)

ForEach控制器一般和用戶自定義變量一起使用,其在用戶自定義變量中讀取一系列相關的變量。該控制器下的采樣器或控制器都會被執行一次或多次,每次讀取不同的變量值。

參數:

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

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

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

? ? ? ?End index for loop(inclusive):循環結束的索引

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

用戶自定義變量:

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

執行結果:

  總共執行了3次,每次執行時會把獲取到的變量值賦值給輸出變量outNmae,其它地方可以通過${outNmae}進行調用。

7)事務控制器(Transaction Controller)

事務控制器會生產一個額外的采樣器,用來統計該控制器子結點的所有時間。

應用場景:?完成一個完整的頁面請求或一組請求

參數:

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

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

jmeter控制器之二 :

8)If?控制器(If Controller)

? ? ? ? 根據給定表達式的值決定是否執行該節點下的子節點,默認使用javascript的語法進行判斷(如下圖紅框內的文字)。

參數:

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

? ? ? ? Evaluate for all children:如果選中這一項,在每個子結點執行前都會計算表達式 。

9)Switch控制器(Switch Controller)

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

有兩種賦值方式:

? ? ? ? ? ?第一種是數值,Switch控制器下的子節點從0開始計數,通過指定子節點所在的數值來確定執行哪個元素。

? ? ? ? ? ?第二種是直接指定子元素的名稱,比如采樣器的Name來進行匹配。當指定的名稱不存在時,不執行任何元素。

? ? ? ? ? ?當Value為空時,默認執行第1個子節點元素。

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

控制其下的子節點的執行次數與負載比例分配,別被名字迷惑了,跟吞吐量沒任何關系。也有兩種方式:Total Executions和Percent Executions。

Total Executions:設置運行次數,整個測試計劃中總計執行次數。

Percent Executions:設置運行比例(1~100之間),整個測試計劃中總計執行百分比。

Throughtput:?設計的數值。

Per User:?依據網上的說明在選擇Total Executions時,勾選時會在每個線程中執行的次數。但在3.0版本中嘗試使用無效 。

11)隨機控制器(Random Controller)

隨機執行其下的某個子結點,隨機選擇控制器中的請求進行執行。

應用場景:?頁面的隨機訪問。

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

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

隨機執行其下的所有子結點。與Random Controller不同的是,這個控制器會先將需要隨機的內容均執行一遍,但次序不定。

應用場景:?頁面的隨機訪問,但均需要訪問,且次序不限。

jmeter控制器之三:

13)Critical Section Controller?關鍵部分控制器

用于核心部分的控制,確保其子節點下的取樣器或控制器在一個線程中僅會執行一次。

應用場景:?用戶登錄。

配制說明: Lock name:?鎖名稱,這里可以填入其子節點下執行的線程的名稱,這個線程作為一個全局鎖存在。

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

應用場景:?測試過程中,需要引用外部的測試計劃。

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

15)Interleave Controller?間隔控制器

也稱交替控制器,使該控制器包含的取樣器步驟交錯執行在每個循環中,每個線程用戶僅執行一次控制器內的請求,線程用戶依據循環的次數請求控制器中的請求數。

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

16)Module Controller?模塊控制器

模塊控制器,用于跳轉到選定的控制器位置并執行對應的控制器。

應用場景:?業務邏輯的跳轉。

配制說明:Module to Run:?選擇需要跳轉到的目標控制器 。

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

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

PS02:模塊控制器的優勢在于:當存在多個線程組時,該控制器可以輕松切換,只需要選擇對應的取樣器,方便快捷,替代了創建很多測試計劃的繁瑣操作。

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

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

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

運行時間控制器,設置控制器中的請求運行時間,單位:秒。

應用場景:?對業務請求時間進行限制。

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

18)While Controller?循環控制器

循環控制器,與開發語言中的While功能一致。直到條件為false時,停止運行。

應用場景:?循環執行一個請求,僅判斷一種狀態下退出循環。

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

可能的條件值有:

? ? ? ? 空:最后一個示例循環失敗時退出循環。

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

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

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

2.5監聽器(Listener)

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

添加監聽器:查看結果樹

以上的五類原件(測試計劃、線程、測試片段、控制器、監聽器)就可以構成一個簡單的性能測試腳本。

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

步驟:

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

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

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

4、右擊線程組>添加監聽器>查看結果樹。

5、點擊運行/綠色的運行按鈕>查看結果樹>HTTP請求顯示綠色為請求成功,紅色為請求失敗。

PS:不是顯示綠色就是請求成功了,還要檢查請求和響應的數據是否正確。最好的辦法的是通過添加斷言的方式來判斷。

斷言:用于檢查測試中得到的響應數據等是否符合預期,Assertions一般用來設置檢查點,用以保證性能測試過程中的數據交互與預期一致。

取樣器:HTTP請求參數填寫


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

推薦閱讀更多精彩內容