Jmeter 主要概念
JMeter 工具與其他性能測試工具在原理上完全一致,工具本身包含4個部分。
1. 負載發生器
用于產生負載,通常以多線程或多進程的方式模擬用戶行為。
2. 用戶運行器
通常是一個腳本運行引擎,用戶運行器附加在線程或者進程上,根據腳本要求模擬指定的用戶行為。
3. 資源監視器
用于獲取測試過程中服務器、負載機的資源數據
4. 報表生成器
根據測試中獲得的數據生成報表,提供可視化的數據顯示方式
Jmeter 的主要元件
1. Test plan(測試計劃)
Test Plan 元素:控制型元素。只能存在于樹形結構的根節點。它代表了整個測試方案,測試人員可以在這里設置一些全局性的內容,例如全局變量(注意全局變量是 Thread Local)、ClassPath 配置(如果希望在 Jmeter 中調用自己的 Java 類就需要在這里設置了)。
啟動 Jmeter 后,Jmeter 會自動生成一個空的測試計劃,用于可以基于該測試計劃建立自己的測試計劃。
注意:里面名稱和注釋沒有什么好說的,重點注意的是 獨立運行每個線程組(例如在一個組運行結束后啟動下一個)
例子:創建 A、B 兩個線程組。
如果不勾選獨立運行每個線程組,這兩個線程組就一起跑。我們添加兩個 HTTP 請求,小a和小b
我們添加個監聽器(添加方式這里先不說,看后面文章)跑一次看一下。
如果勾選獨立運行每個線程組,會嚴格遵守順序 AB 從上往下依次運行。
2. Thread Group(線程組)
Thread Group 元素:控制型元素。只能存在于 Test Plan 元素之下。它代表了一組行為相似的用戶,通常我們把一類用戶的動作放在同一個 Thread Group 下,這樣就可以模擬多個這樣的用戶了。在這里可以配置模擬用戶的個數(線程的個數)、循環次數、執行時間等。
一個線程組可以看做是一個虛擬用戶組,Thread Group 中的每個線程都可以理解為一個虛擬用戶。Thread Group 中包含的線程數量在測試執行過程中是不會發生改變的。
Jmeter 中每個測試計劃至少需要包含一個線程組,當然也可以在一個線程中創建多個線程組,那么多個線程組之間又會怎樣的順序執行(串行還是并行)?在測試計劃下面多個線程是并行執行的,也就是說這些線程組是同時被初始化并同時執行線程組下的 Sampler(采樣器) 的。
線程組有三個,用法如下。
Thread Group:線程組(操作)---2
setUp Thread Group:初始化(登錄)---1
TearDown Thread Group:結束-恢復(登出)---3
線程組參數詳解
線程組主要包括三個參數:線程數、準備時長(Ramp-Up Period(in seconds))、循環次數。
線程數:虛擬用戶數。一個虛擬用戶占用一個進程或線程。設置多少虛擬用戶數在這里也就設置多少個線程數。
準備時長:設置的虛擬用戶數需要多長時間全部啟動。如果線程數為20,準備時長為10,那么需要10秒鐘啟動20個線程。也就是每秒鐘啟動2個線程。
循環次數:每個線程發送請求的次數。如果線程數為20,循環次數為100,那么每個線程發送100次請求。總請求數為 20*100=2000。如果勾選了 “永遠”,那么所有線程會一直發送請求,一直到選擇停止運行腳本。
設置合理的線程數對于能否達到測試目標有 決定性的影響。另外設置合理的循環次數也很重要,除了上面介紹的固定循環次數與永遠外;也可以靈活的選擇設定測試運行時間。勾選 “調度器”,進行調度器配置。
有個誤區這里要注意一下,看一下下面兩張圖的配置。
雖然結果不一樣,但是它們最終產生的都是10個請求。
第一張圖:5秒鐘啟動5個用戶,一秒鐘啟動一個用戶,用表格查看結果會發現一個特點,感覺是5秒鐘啟動10個,這只是表面現象,它是這么做的我在第1秒第一個用戶被啟之后隔了1秒啟動第2個,在啟第2個的同時第1個要執行第二次的循環,所以感覺是5秒啟動10個請求。記住一個原理,它啟動之后不等你響應,但是它在表格查看結果里面感覺它是等響應的。因為在表格查看結果里面它是等響應的,等你得了響應它才顯示出來,所以表格查看結果顯示里面顯示和發的不一定同步的,顯示一般會滯后,你1秒發一個,可能我等的時間很長。
第二張圖:5秒啟10個,只管發出去。
3. 斷言元件
- 3.1.1 響應斷言
響應斷言:通過檢查服務器的響應數據:是否符合預期想要的數據,判斷任務是否成功
注意:增加響應斷言要注意一個細節問題,在Jmeter中作用域非常關鍵,元件一旦放錯了,很有可能你得到的結果跟你的場景效果完全不一樣。
你想去判別哪個請求,就放在哪個請求里面去不能放外面,因為對于我們來說有三種作用域,第一種測試計劃的(全局的)、第二種線程組的(第二級別的全局)、第三個是請求的,不同的作用域代表的效果不一樣。
-3.2.2 斷言持續時間
斷言持續時間:判斷是否在給定的時間內給出響應結果
例子:
協議:http
ip地址:xxxx(如果是域名就寫域名)
端口:xxxx
路徑:我們這里不需要進行操作直接寫 / 就好。
斷言里面寫上匹配的內容。
4. 監聽元件——查看結果樹
請求寫好之后,添加監聽元件,監聽元件主要常用的有查看結果樹、聚合報告、表格查看結果、圖形結果,我們這里使用第一個查看結果樹。
注意:查看結果樹如果斷言成功它沒有顯示,如果斷言失敗它是有顯示的(顯示紅色)。看具體某個請求的請求響應結果明細,可以使用查看結果樹
下面截圖一個斷言成功,一個斷言失敗的。
查看結果樹里面是有非常多內容的,請求下面有2個一個是 Request Body(請求體) 另一個是 Request Headers(請求頭) ,有響應數據和取樣器,里面請求方式響應體的內容都有,可以多研究一下。
4.1 監聽元件-聚合報告
所謂聚合報告相當于一個匯總的報告,它會把所有請求放在一塊。 聚合報告一般是一個綜合報告,里面會顯示整個跑的一個場景。匯總報告--匯總結果,可以使用聚合報告
里面的中位數和百分位單位是 毫秒 叫響應時間,平均數只能參考不能看,因為這個東西太坑了,比如考試全班平均分70分,兩級分化特別嚴重。還有工資被平均了,這里大家都懂的哈。
這里一般看90%的比較多。
這里有個要注意的地方,如果我只想清除聚合報告的數據該怎么清?上面有兩個掃把,這里點擊左邊這把,刪除當前的。如果點擊右邊的就會把監聽器所有的數據都清空了。
4.2 監聽元件-表格查看結果
如果想看每個請求的詳情,可以用表格查看結果,這是一個顆粒度問題。里面的1-1,第一個1是第1個線程組的編號,第二個1是用戶。
4.3 監聽元件-圖形結果
這個組件是在聚合報告(Aggregate report)的基礎之上增加了圖形化展示,把數據轉化成柱狀圖的形式展示,并且可以編輯圖形展示的樣式,以圖形化展示結果。
5. 定時器元件
5.1 固定定時器 Constant Timer
固定定時器一般叫思考時間,所謂思考時間就是盡可能模擬用戶使用情況。比如下面有個線程組,我希望首頁登錄完之后,b請求等2秒鐘時間。
這里就需要增加固定定時器,這里要注意作用域,固定定時器是一個前置的處理程序,是先運行固定定時器,再運行請求的。這里我們要放置在b里面,運行b之前先等待2秒鐘。
**5.2 同步定時器 **
作用:
模擬并發。設置一個閥值(請求數量),當請求數達到這個閥值時,允許請求同時發出。例如:想測試一座橋的并發(忽略載重等其他因素,只考慮通過),那么并發的請求就是類似于多少輛車可同時通過橋,而車輛一般情況下是不可能同時通過橋的,因而我們可以在橋頭A,設置一個集合點,等車輛數滿足一定的數量,同時讓車輛通過此橋。
同步定時器有兩個參數需要填寫,第一個模擬用戶的數量,第二個超時時間以毫秒為單位。這里面的兩個0標識不限制不設置,第一個0標識全部,第二個0表示超時,不等到那個人我一直等下去。
6.邏輯控制器
僅一次控制器:只運行一次,這個請求只運行一遍,如果2個用戶運行2遍,以用戶為單元。
轉換控制器(switch Controller) 選擇控制器,比如我有a用戶,它里面有兩種場景1業務和2業務。不是讓他一直運行1或者一直運行2,我現在想讓他交替運行。就可以用轉換控制器,什么時候條件滿足選擇1,什么時候條件滿足選擇2。
添加轉換控制器要把請求放進去,Switch Value 的值是從下標0開始的。0代表的首頁訪問,這里填寫0就只運行首頁訪問。Switch Value 這里的值可以通過參數化隨機數來做。
循環控制器 就是控制循環的次數,跟代碼中的while一樣,不過多解釋
事務控制器 訂單提交,其會調用多個接口。首先我們要區分一個問題,打個比方我們點擊一個登陸按鈕或者查詢訂單的,我們按鈕按下去會發送多個請求到服務器,這個要理解叫事務數,Jmeter最小單元是請求,如果說一個動作或業務他的一步操作有很多請求的話我不可能去把它自己加起來。
例子:比如下面線程組-2有兩個請求。這個查詢操作有兩個操作a和b請求,如果我們直接運行的話,在聚合報告中我們可以看到有2個(圖2)。如果我想看這個查詢的功能具體響應時間到底是多少呢,我得自己加。會很麻煩。
為了解決上面的問題,我們可以增加 事務控制器 ,然后把請求都放到事務控制器里面,可以看到數據都幫我們統計出來了(圖2),用表格查看結果里面顯示了有3個請求,是因為事務控制里面有兩個選項,如果不勾的話
查詢-事務
就會單獨顯示,它是一個總和在查看結果樹里面是3個(但是事務請求里面沒有東西,因為它是一個虛擬的就為了統計一個東西。),
事務控制器里面有兩個選項。Generate parent sample 如果選中,則生成樣本為其他樣本的父項(圖2),這里注意勾選之后如果一個請求失敗這個事務就失敗了。勾選之后意味著他們就是一個整體。如果不勾選樣本將作為獨立樣本生成(圖3),那個失敗就會顯示出來。
Include duration of timer and pre-post processors in generated sample:是否在生成樣本中包括計時器,預處理和后處理延遲。默認值為false。一般不建議選擇。因為選擇會把一些額外時間算入總時間,勾選則會把其他時間算入事務總數。勾完之后如果整個事務里面添加固定定時器,他會算2次的。