1. Jmeter簡介
2.Jmeter安裝
2.1、需要安裝JDK
JDK—java開發工具包
JRE—java運行環境
JVM—java虛擬機
2.2、驗證機器是否安裝好java環境
java -version—查看版本號
java 驗證系統的環境變量path是否設置ok
2.3、設置環境變量—目標:任意路徑可以識別jmeter
JMETER_HOME:D:\JMeter\apache-jmeter-5.1.1
PATH:%JMETER_HOME%\bin
2.3、雜項
每一台機器是否能創建多少個用戶數—內存(物理內存)16G
Jmeter—一個java進程—進程需要一定內存資源-堆內存
jmeter-server—分布式啟動時使用
jmeter.bat—單台機器啟動
jmeter永久中文設置—打開bin目錄下jmeter.properties文件在37行左右修改為language=zh_CN
3.性能指標簡介
3.1性能指標四個字總結:多、快、好、省。
多:對應的就是並發量
快:延時、響應時間
好:穩定性(長時間運行)
省:資源使用率
3.2、性能指標的描述:
3.2.1、響應時間:對請求作出響應所需要的時間,是用戶感知軟件性能的主要指標(端到端的)
響應時間包括:
1.用戶客戶端呈現時間
2.請求\響應數據網絡傳輸時間
3.應用服務器處理時間
4.數據庫系統處理時間
思考:響應時間多少合理?答:2、5、8秒原則
3.2.2、並發用戶數
並發用戶數的概念:系統用戶數、在線用戶數、並發用戶數
系統用戶數:軟件系統注冊是用戶總數
在線用戶數:(1)某段時間內訪問的用戶數,這些用戶只是在線,(2)不一定同時做某一件事情
並發:用於從業務的角度模擬真實用戶訪問同時訪問
並發數:同時訪問系統的用戶數
在c/s或者b/s結構的應用,系統的性能主要有服務器覺得,服務器在大量用戶同時訪問時壓力最大
並發分為:
嚴格並發:秒殺
廣義並發:不同用戶做不同的事情
計算:
平均並發用戶數的計算:c=nL/t
c-是平均的並發用戶數
n-是平均每天訪問用戶數
l-是一天內用戶從登陸到退出的平均時間
t-是考察時間長度(一天內多長時間有用戶使用系統
並發用戶數峰值計算:C^約等於C+3*根號C
3.2.3.吞吐量
性能測試:指單位時間內系統處理用戶的請求數
從業務角度看:吞吐量可以用:請求數/秒、頁面數/秒、人數/天或處理業務數/小時等單位來衡量用戶請求數/秒或頁面數/秒來衡量
從網絡角度看:吞吐量可以用:字節/秒來衡量
對於交互式應用來說,吞吐量指標反映的是服務器承受的壓力他能夠說明系統的負載能力
TPS:每秒事物數
計算:當沒有遇到性能瓶頸的時候吞吐量與虛擬用戶數之間存在一定的聯系,可以采用以下公式計算:
F=VU*R/T=100*1/5=20
其中F為吞吐量,VU表示虛擬用戶個數,R表示每個虛擬用戶發出的請求數,T表示每個虛擬用戶 發出的請求數,T表示性能測試所用的時間
沒有經過初始化的性能環境等於沒有作用的環境
3.2.4.性能計數器
性能計數器:是描述服務器或操作系統性能的一些數據指標
比如:內存,CPU、磁盤等資源使用率等
3.2.5.思考時間
Think time:從業務角度來看,這個時間指用戶進行操作時每個請求之間的時間間隔
在做性能測試時,為了模擬這樣的時間間隔,引入了思考時間這個概念,來更加真實的模擬用戶的操作
網絡環境是影響性能指標的重要因素之一;解決方法:連續運維:對linux系統注入網絡延時的方法(比如數據庫服務器在美國,應用服務器在加拿大和你直接2台服務器通過網線直連有很大區別)
重要:
沒有經過初始化的性能環境等於沒有作用的環境
網絡環境是影響性能指標的重要因素之一;解決方法:連續運維:對linux系統注入網絡延時的方法(比如數據庫服務器在美國,應用服務器在加拿大和你直接2台服務器通過網線直連有很大區別)
數據庫:數據庫dump,如果數據敏感不能做導出,可以確認數據庫表的數據格式,創造測試數據
4.什么是jmeter腳本
4.1.概念:
通俗:用戶操作被測軟件系統某場景的動作流程
Jmeter:用戶操作被測軟件系統某場景的請求
性能測試:重要場景從1到N的變化
4.2.怎么快速開發漂亮的腳本
准確:最基本的要求,腳本能可以正常運行
快速:借助技術手動快速高效完成腳本開發
漂亮:腳本邏輯、維護性高
4.3.開發腳本方案
方案一:代理“劍”
劍語:jmetery也有自己的dialing,錄制腳本前,我們只要啟動好代理,手動通過瀏覽器來錄制,錄制完畢停止代理
1.提示:
直接保存jmx文件
需要人為調整腳本
錄制https需要設置
2.Jmeter自帶腳本錄制工具
測試計划-》新建線程組-》右擊測試計划-》非測試媛姐-》HTTP代理服務器
1.jmeter設置端口
2.jmeter設置目標控制器選擇測試計划>線程組
3.打開瀏覽器,導入jmeter證書,證書在Jmeter的bin目錄下ApacheJMeterTemporaryRootCA.crt
4.設置瀏覽器代理,代理地址就是本機127.0.0.1,端口號就是HTTP代理服務器設置的端口號
5.可點擊HTTP代理服務器-》Requests Filtering設置排除沒用的請求
6.點擊啟動即可
方案二:badboy錄制(不怎么用了)
方案三:Fiddler(可導出jmx文件)
5.Jmeter主要元件
JMeter的主要元件有測試計划、線程組、取樣器、邏輯控制器、配置元件、前置處理器、后置處理器、監聽器、定時器、斷言
其中共有8類可被執行的元件, test plan(測試計划)和 thread group(線程組)不屬於可被執行的元件,而 sampler(取樣器)是不與其他元件發生交互的作用的元件。
5.1測試計划(Test Plan)
用來描述一個性能/接口測試腳本和場景設計,包含與本次測試所有相關的功能。也就是說,使用Jmeter進行測試的所有內容,都是與基於一個測試計划中在換個說法,一個測試計划就對應一個Jmeter測試腳本
在Jmeter-Gui中,只能編輯一個測試計划,如果需要新創建一個測試計划,就要開啟一個新的Jmeter-Gui窗口界面。
5.2線程組Threads(Users))
線程組元件是任何一個測試流程的起始點,在一個測試計划中的所有 元件都必須在某個線程組下。
JMeter自帶的線程組,如下圖所示:
(1)、setup thread group(setup線程組)
一種特殊類型的ThreadGroup的,可用於執行預測試操作。這些線程的行為完全像一個正常的線程組元件。不同的是,這些類型的線程執行測試前進行定期線程組的執行;類似LoadRunner的init,測試開始時進行初始化的工作。
(2)、teardown thread group(tearDown線程組)
一種特殊類型的ThreadGroup的,可用於執行測試后動作。這些線程的行為完全像一個正常的線程組元件。不同的是,這些類型的線程執行測試結束后執行定期的線程組;類似LoadRunnner的end,測試結束時進行回收工作。
(3)、thread group(線程組)
這個就是我們通常添加運行的線程。通俗的講一個線程組,可以看做一個虛擬用戶組,線程組中的每個線程都可以理解為一個虛擬用戶。
雖然三個線程組名字不一樣,但是創建之后,頁面都是一樣的
線程組概括說明:
1. 線程組是一個測試流程的起始點。
2. 線程組中可以有多個線程。線程組也可以看作是一個虛擬用戶組, 線程組中的每一個線程都可以理解為相當於一個“虛擬用戶”。
3. 線程組中一個取樣器代表一個請求,一個請求等同於一個線程。
4. 每個線程都會獨立的運行測試計划,互不干擾,多個線程用於模仿 對服務器的並發訪問。
5. 線程組元件可以設置線程數、設置執行測試的次數等操作。
【線程數】:虛擬用戶數,控制多少用戶並發
【Ramp-Up時間】:啟動所有線程需要的時間;
1. 若是線程數過多,則會>該值啟動完所有線程。
2. 為0代表立即啟動所有線程;一般不這么設置,因為在測試的開始就建立全部線程並立即發送訪問請求,會引起不正常的初始訪問峰值。
3. 設置為T,N個線程時,JMeter將每隔T/N秒建立一個線程。T過大會降低訪問峰值的負載:后面的線程還沒啟動,前面啟動的部分線程已經結束了。
4. 網上提到設置合理的啟動時間的方法:讓初始吞吐量接近平均吞吐量,避免啟動時間過小,同時最后一個線程啟動時,第一個線程還未結束,避免啟動時間過大。
【循環】:每個線程的循環次數。用來延長單個線程的運行時間,從而保證當最后一個線程啟動時,所有線程都在運行中,達到壓測效果。
1.若不勾選永遠,設置為固定值。為達到最后一個線程啟動時第一個線程還未結束,循環次數的計算方法為:
(1)假設線程數:5,ramp-up:10s,rt:0.2s
(2)最后一個線程啟動開始時間 S = 10 - 10/5 = 8s
(3)第一個線程運行時間應該 > 8s
(4)循環次數 a > 8/0.2 = 40,即循環次數最少為40次,此時整個測試理論運行時間 = 40*0.2 + 8 = 16s
【延遲創建線程直到需要】:
JMeter 所有的線程是一開始就創建完成的,只是遞增的時候會按照上面的規則遞增;
如果選擇了這個選項,則不會在一開始創建所有線程,只有在需要時才會創建。這樣CPU 消耗會更平均,但是這時會有另一個隱患:稍微影響正在跑的線程;
如果不選擇,在啟動場景時,JMeter 會用更多的 CPU 來創建線程,它會影響前面的一些請求的響應時間,因為壓力機的 CPU 在做其他事情。
舉例:
-
-
設置 線程數:100,Ramp-Up:1s, 循環:2。
表示1秒內啟動100線程並循環2次。 -
設置 線程數:3,Ramp-Up:1s, 循環:永遠,持續時間:5s。
1s內啟動3個線程,持續循環5s。
-
【調度器】:
持續時間(秒):測試計划持續多長時間,會覆蓋結束時間。
啟動延遲(秒):測試計划延遲多長時間啟動,會覆蓋啟動時間。
5.3取樣器(sampler)
-
- 取樣器是用來模擬用戶操作的,向服務器發送請求以及接收服務器的 響應數據。
- 取樣器是線程組內部的元件,也就是說取樣器只能在線程組中添加。
- 取樣器(Sampler)是性能測試中向服務器發送請求,記錄響應信息,記 錄響應時間的最小單元。(取樣器通常要進行這三個工作)
- 取樣器是按照測試計划樹的順序從上到下執行的。且取樣器配合控制 器使用,可以修改取樣器的執行順序和次數。
重要:調試取樣器,它是我們在開發腳本的時候調試用的。添加調試取樣器后在察看結果樹中能看到我們在腳本中所有參數化變量所取的值,這樣有利於我們排錯
5.4邏輯控制器(Logic Controller)
-
- 我們有編程基礎的人都知道,提到邏輯主要就是條件和循環。
- JMeter官網對邏輯控制器的解釋是:Logic Controllers determine the order in which Samplers are processed.
- 意思是說,邏輯控制器可以控制取樣器(samplers)的執行順序。
- 由此可知,控制器需要和采樣器一起使用,否則控制器就沒有什么意義了。放在控制器下面的所有的采樣器都會當做一個整體,執行時也會一起被執行。
jmeter提供了17種邏輯控制器,它們各個功能都不盡相同,大概可以分為2種使用類型
1.控制測試計划執行過程中節點的邏輯執行順序,如:Loop Controller(循環控制器)、If Controller(如果if控制器)等;
2.對測試計划中的腳本進行分組,方便JMeter統計執行結果以及進行腳本的運行時控制等,如:Throughput Controller(吞吐量控制器)、Transaction Controller(事務控制器)等
5.4.1、循環控制器(loop Controller)--控制器下放http請求
指定其子節點運行的次數,可以使用具體的數值,也可是設置為變量(截圖描述更詳細)
5.4.2、簡單控制器(Simple Controller)
簡單控制器是最基本的控制器,對jmeter測試運行沒有任何影響,可用來命名某些操作
這是Jmeter里最簡單的一個控制器,它可以讓我們組織歸整我們的采樣器和其它邏輯控制器(即:分組功能),提供一個塊的結構和控制,不具有任何的邏輯控制和運行時的功能;
5.4.3、遍歷循環控制器(ForEach Controller)
輸入變量前綴:在其中輸入需要遍歷的用戶參數(User Parameter)
Start index for loop(exclusive):循環指數開始(唯一)→ 遍歷查詢的變量范圍,開始的值(這里如果不填寫,默認從1開始,如果沒有1開始的變量,執行時會報錯)
End index for loop(inclusive):循環指數結束(包含)→ 遍歷查詢的變量范圍,結束的值
輸出變量名稱:將遍歷查詢到的符合條件的用戶參數賦值給輸入變量(Vname),然后就可以在控制器下的取樣器使用,格式為${輸出變量名}
Add”_”before number:輸入變量名稱中是否使用“_”進行間隔
PS:這個控制器一般配合配置元件→ 正則表達式提取器來一起使用,可對頁面上的某些元素進行重復處理
5.4.4、包含控制器(Include Controller)
作用:用於引用外部的Jmx文件;從而控制多個測試計划組合
五、臨界區控制器(critical section Controller)
作用:臨界區控制器確保其子節點下的取樣器或控制器將被執行(只有一個線程作為一個鎖)
六、生命周期/運行周期控制器(Runtime Controller)
作用:用於控制該控制器下的取樣器/控制器的運行時間
七、僅一次控制器(once only controller)
作用:在測試計划執行期間,該控制器下的子結點對每個線程只執行一次,登錄場景經常會使用到這個控制器。
注意:將Once Only Controller作為Loop Controller的子節點,Once Only Controller在每次循環的第一次迭代時均會被執行
八、轉換控制器(Switch Controller)
作用:Switch控制器通過給該控制器中的Value賦值,來指定運行哪個采樣器。有兩種賦值方式:
· 第一種是數值,Switch控制器下的子節點從0開始計數,通過指定子節點所在的數值來確定執行哪個元素。
· 第二種是直接指定子元素的名稱,比如采樣器的Name來進行匹配。當指定的名稱不存在時,不執行任何元素。
當Value為空時,默認執行第1個子節點元素
九、當/判斷控制器(While Controller)
作用:運行其子節點下的取樣器/控制器,直到條件為“假”
十、事務控制器(transaction controller)
作用:生成一個額外的采樣器來測量其下測試元素的總體時間;值得注意的是,這個時間包含該控制器范圍內的所有處理時間,而不僅僅是采樣器的
十一、IF控制器(If Controller)
條件(默認JavaScript)(Condition(default javascript)):使用JavaScript的函數或變量進行評估判斷條件為真或假
條件解釋為變量表達式(interpret condition as variable expression):如果勾選該項,那么變量表達式會進行求值,並與“ture”或“false”進行比較,而無需使用JavaScript
對所有子條件執行(evaluate for all children):如果勾選該項,則該controller在沒一個子節點執行時執行一次;
默認情況下,該控制器可以對包含在其下面的所有可運行的元素進行執行,但只在入口執行一次
十二、吞吐量控制器(Throughput Controller)
作用:控制其下的子節點的執行次數與負載比例分配,別被名字迷惑了,跟吞吐量沒任何關系。jmeter自帶的翻譯這里是錯誤的,因為它並不能控制吞吐量(吞吐量的概念請訪問百度);其實質作用是允許用戶控制執行的頻率;也有兩種方式:
百分比執行和總執行
總執行(Total Executions):使控制器停止執行一定數量的測試計划
百分比執行(Percent Executions):使控制器按一定比例執行迭代的測試計划
流量(Throughput):對應上面的執行數量或者比例
每個用戶(Per User):每個用戶
如果勾選此項,將導致控制器計算是否應該執行在每個用戶(每個線程)的基礎上;如果不加以控制,那么將計算全球所有用戶
十三、Interleave Controller 交替控制器
使用方法:假使該控制器下有2個取樣器A和B,交替執行A和B2個請求,即每次傳遞一個子請求到這個測試,按子元件的排列順序
十四、隨機控制器(Random Controller)
作用:類似交替控制器,但該控制器隨機選取某一個取樣器請求並執行
十五、隨機順序控制器(Random Order Controller)
作用:隨機執行其下的所有子結點
與Random Controller不同的是,這個控制器會先將需要隨機的內容均執行一遍,但次序不定
十六、錄制控制器(Recording Controller)
作用:類似代理服務器的作用,在測試執行期間記錄測試樣本
十七、模塊控制器(Module Controller)
作用:測試控制器子節點下的某一個模塊,而不是整個測試計划
· 模塊控制器,用於跳轉到選定的控制器位置並執行對應的控制器
· 應用場景: 業務邏輯的跳轉
配制說明
· Module to Run: 選擇需要跳轉到的目標控制器
5.5、定時器(Timer)
用戶實際操作時,並非是連續點擊,而是存在很多停頓的情況,例 如:用戶需要時間閱讀文字內容、填表、或者查找需要點擊的鏈接 等。為了模擬用戶實際情況,在性能測試中我們需要考慮操作時間。 若不認真考慮操作時間很可能會導致測試結果的失真。例如,估計的 可支撐用戶數可能會偏小。
在性能測試中,訪問請求之間的停頓時間被稱之為思考時間。 那么如何模擬這種停頓呢?我們可以借助JMeter的定時器元件實現。
Jmeter中的定時器一般被我們用來設置延遲與同步(操作之間的等待時間)。定時器的執行優先級高於Sampler(取樣器),在同一作用域(例如控制器下)下有多個定時器存在時,每一個定時器都會執行,如果想讓某一個定時器進隊某一Sampler有效,則可以把定時器加在此Saopler節點下。
Jmeter自帶的定時器,如下圖所示:
Constant Timer 固定定時器
作用:通過ThreadDelay設定每個線程請求之前的等待時間(單位為毫秒)。注意:固定定時是有作用域的,放到線程組下其作用域是所有請求都會延遲固定器設置的時間,如果放到請求內,作用域是單個請求延遲時間(常用)。
Uniform Random Timer 均勻隨機定時器
作用:它產生的延遲時間是個隨機值,而各隨機值出現的概率均等。總的延遲時間等於一個隨機延遲時間加上一個固定延遲時間,用戶可以設置隨機延遲時間和固定延遲時間。
總延遲時間=指定范圍內的隨機時間+固定延遲時間。
Constant Throughput Timer 固定吞吐量定時器
Gaussian Random Timer 高斯隨機定時器
JSR223 Timer JSR223定時器
Poisson Random Timer 泊松隨機定時器
Synchronizing Timer 同步定時器
作用:用來設置集合點,其作用是:阻塞線程,直到指定的線程數量到達后,再一起釋放,可以瞬間產生很大的壓力
(1)Number of Simulated Users to Group by:模擬用戶的數量,即指定同時釋放的線程數數量,若設置為0,等於設置為線程組中的線程數量;
(2)Timeout in milliseconds:超時時間,即超時多少毫秒后同時釋放指定的線程數;如果設置為0,該定時器將會等待線程數達到了設置的線程數才釋放,若沒有達到設置的線程數會一直死等。如果大於0,那么如果超過Timeout inmilliseconds中設置的最大等待時間后還沒達到設置的線程數,Timer將不再等待,釋放已到達的線程。默認為0
同步定時器(Synchronizing Timer)的超時時間設置要求:超時時間 > 請求集合數量 * 1000 / (線程數 / 線程加載時間)
BeanShell Timer BeanShell腳本編寫定時器
參數說明:
Reset Interpreter:每次迭代是否重置解析器,默認為false;在長時間運行的腳本中建議設置為true。
Parameters:BeanShell腳本的入參。入參可以是單個變量;也可以是數組,若是字符串數組,兩個元素之間用空格隔開;也可以是常量。
File Name:BeanShell腳本可以從腳本文件中讀取。
Script:在Script區直接寫BeanShell腳本。
增加一個Java Request請求,並且增加時間驗證是否按照自己設定的定時運行腳本:
Java Request ${__time(yyyy-MM-dd HH:mm:ss:SSS,)}
增加結果查看樹:結果顯示按之前設置的每個1秒鍾運行
Precise Throughput Timer 精准吞吐量定時器
5.6前置處理器
前置處理器是在取樣器發出請求之前執行一些操作。即:如果將強制處理器附加到取樣器原件,則他將在該取樣器原件運行之前執行
前置處理器蛀牙是用來處理,請求在實際發送之前的一些准備工作,比如取樣器參數設置,環境變量設置,腳本預處理等操作
例如當URL中有sessionID一類的session信息時,可以通過該處理器填充發出請求實際的sessionID
Jmeter自帶的前置處理器,如下圖所示
5.6.1 HTML Link Parser(HTML鏈接解析器)
HTML鏈接解析器,用於從前一個sampler返回的html頁面中按照規則解析鏈接和表單,再根據此處理器所在的sampler中的規則進行匹配修改,而后該sampler會執行;
此處理器無配置,使用示例如下:
如下示例中執行說明為:
1. 發送sampler“搜索”並返回HTML頁面;
2. sampler“點擊鏈接”中下的HTML鏈接解析器會將步驟1中返回的HTML頁面根據“點擊鏈接”這個sampler設置的規則進行解析並將解析結果發送給sampler“點擊鏈接”;
3. sampler“點擊搜索”發送;
HTTP URL Re-writing Modifier(HTTP URL重寫修改器)
HTTP URL重寫修改器,此處理器與HTTP Link Parser類似,但專用於使用url重寫來存儲sessionId而非cookie的http request,在線程組級別添加此修改器則應用於所有sample,若為單個sample添加則只適用該sample;
參數配置:
Session Argument Name:會話參數名稱,用於搜索sessionId,其他sample也可通過此參數來 調用其獲取的sessionId;
Path Extension:路徑擴展,如url添加了分號作為分割,則勾選此項;
Do not use equals in path extension:用於url不用等號來分割key和value的類型;
Do not use questionmark in path extension:用於不帶?的類型;
Cache Session Id?:勾選此項則會存儲在其掛載的sample上獲取到的sessionId供后邊的其他sample使用;
URL Encode:是否使用url編碼;
User Parameters(用戶參數)
用戶參數,用於做幾組參數給線程組的各個線程使用,如果線程數多於用戶參數組數,則多出來的線程則從第一組用戶參數開始依次調用參數組;
參數配置:
Name:此前置處理器的名稱;
Update Once Per Iteration:標識是否每輪迭代更新一次元素;
JDBC PreProcessor(數據庫預處理器)
數據庫預處理器,用於在sample開始前查詢數據庫並獲取一些值;
參數配置:
Variable Name of Pool declared in JDBC Connection Configuration:連接池名稱,需與JDBC鏈接配置中的Variable Name相同(此預處理器需要一個JDBC Connection Configuration,此配置器在配置元件中);
Query Type:數據庫查詢類型,根據需要自行選擇;
Query:數據庫語句輸入框,根據需要輸入,注意結尾不要加”;”;
Parameter values:參數名稱,如果Query的語句中有”?”則此處填值,可以使用調用參數方式;
Parameter types:參數類型,與Parameter values對應,設置參數類型,與sql字段類型相同;
Variable names:設定此項可以獲取固定列的所有值;
Result variable name:隨意設定一個名稱,則此名稱會被作為一個參數並對應Query出來的內容;可以使用參數調用的方法來獲取此設置的名稱對應的值;
Query timeout(s):超時時間;
Handle ResultSet:有四個選項,結果保存的方式;
RegEx User Parameters(重要)
正則表達式,使用正則表達式為從另一個HTTP請求中提取的HTTP參數指定動態值
參數配置:
name:此前置處理器名稱;
Regular Expression Reference Name:調用的正則表達式提取器中的引用名稱;
Parameter names regexp group number:用於提取參數名稱的正則表達式的組編號;
Parameter values regex group number:用於提取參數值的正則表達式的組編號;
Sample Timeout
超時器,用於設定sample的超時時間,如果完成時間過長,此預處理器會調度計時器任務以中斷樣本;
參數配置:
name:超時器名稱;
Sample timeout:超時時間;
JSR223 PreProcessor
JSR223預處理器,用於調用腳本;
參數配置:
Name:名稱,隨意設定;
Language:使用的JSR223語言,可根據需要選擇;
Parameters:傳遞給腳本的參數;
Script file:腳本文件;
Script compilation caching:存儲編譯的腳本,默認勾選;
Script:要運行的腳本;
腳本中可用參數說明:
vars:操作Jmeter變量
a) vars.get(“name”):從jmeter中獲得變量值
b) vars.put(“key”,”value”):保存數據到jmeter變量中,如果變量不存在會自動創建
props: 操作Jmeter屬性
a) props.get(“START.HMS”); 注:START.HMS為屬性名
b) props.put(“PROP1”,”1234”); 保存數據到Jmeter屬性中,如果屬性不存在會自動創建
log: 記錄日志
比如log.info(“日志信息”); 具體查看: https://www.slf4j.org/api/org/slf4j/Logger.html
ctx: 操作上下文,具體查看:
http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html
prev: 操作前一個請求。注意必須有前一個請求才可用,否則會報錯,具體查看:
http://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html
sampler: 操作當前請求。具體查看:
http://jmeter.apache.org/api/org/apache/jmeter/samplers/Sampler.html
BeanShell PreProcessor
BeanShell預處理器,語法使用與BeanShell Sampler是一樣的。但可使用的內置變量稍有不同;
參數配置:
Reset bsh interpreter beford each call:是否重新構造interpreter,即是否重新初始化
Paraneters:BeanShell 腳本中的變量初始化時可以在這里指定值,這里接受變量與字符串數組,如果是字符串數組兩個元素之間用空格隔開
ScriptFile——File Name:指定運行的BeanShell腳本
Script:編寫BeanShell腳本,通過BeanShell可以訪問ctx、vars、props、prev、sample、log。其中通過ctx可以訪問Jmeter運行時狀態,比如線程數和線程狀態;通過vars訪問定義的變量;通過props訪問運行時設置;通過prev訪問前一個取樣器結果;通過sample訪問當前取樣器;通過log寫日志
5.7配置元件(Config Element)
jmeter的配置元件(config element)用於提供對靜態數據的配置支持,可以為取樣器設置默認值和變量。配置元件有很多的功能,讀取文件數據,設置公共請求參數,賦予變量值等,以便后續取樣器使用(類似於項目中配置文件的作用,如數據、地址、數據庫鏈接等進行配置)
例如:性能測試中為了模擬打了用戶操作我們往往需要做參數化,jmeter的參數化可以通過配置元件來完成,理由csv Data Set Config(CSV數據文件設置)可以將本地數據文件形成數據池(Data Pool),它可以幫助我們從文件中讀取測試數據
另外jmeter也提供了眾多的函數來幫我們生產動態數據,(通過函數助手可以查看到)
基礎須知:Jmeter各個元件的執行順序為:配置元件->前置處理器->定時器->取樣器->后置處理器->斷言器->監聽器。配置元件在Jmeter執行過程中,在相同作用域下肯定會被最先執行,使用過程中要嚴格遵守作用域問題。
5.7.1:信息頭管理器
信息頭管理器用來傳輸取樣器信息頭。使用規則:特別需要注意使用的作用域問題,分為3種。
1、如果整個測試計划下的所有取樣器請求都一致,則在測試計划下添加,這樣能做到整個測試計划下共享信息頭。
2、如果在同一線程組下,所有取樣器的請求頭都用到了相同的某個值如:token等,那就在線程組下添加信息頭管理器,這樣同一線程組下的所有取樣器都能傳入相同的請求頭了。
3、如果每個取樣器的請求頭不太一致,則在具體的取樣器下添加。
通過下圖進行下簡單理解:
注意點:
(1)如果存在多個信息頭管理器,則引用的信息頭會進行疊加。如下例子:
【測試計划下添加的信息頭】填入信息:token:12345678
【線程組1下添加的信息頭】填入信息:Content-Type:application/json
則HTTP請求1-1會疊加這兩個值,如圖:
執行結果:
(2)如果存在多個信息頭管理器,而且信息頭管理器有變量名稱重復了,只是作用域不一樣,則會引用作用域小的變量,如下例子:
【測試計划下添加的信息頭】填入信息:token:12345678
【線程組1下添加的信息頭】填入一個與上相同的變量信息:token:abcdefg
則實際執行的時候,會引用作用域小的token,如圖:
執行結果:
(3)如果存在多個信息頭管理器,而且信息頭管理器有變量名稱重復了,作用域也一樣,則會引用第一個信息頭管理器的變量,如下例子:
【測試計划下添加的信息頭1】填入信息:token:12345678
【測試計划下添加的信息頭2】填入信息:token:abcdefgh
則實際執行的時候,得看哪個信息頭管理器放在前面就引用哪個信息頭的變量,該處是將【測試計划下添加的信息頭1】放在前面,所以是引用到了token:12345678。如下圖:
執行結果:引用的是前面的信息頭
5.7.2、Cookie管理器
對於有些請求需要Cookie的時候,可以考慮加上這個配置元件,通常會在登錄接口返回Cookie存儲到客戶端本地,使用該元件可以解決Cookie驗證問題。
使用方式:直接添加即可,一般是添加到測試計划或者線程組下。
5.7.3:請求默認值
如果多個請求存在相同的部分,那么就可以將這些相同的部分抽取到【請求默認值】,在填寫具體請求的時候,就可以省略請求默認值得信息不填,同樣需要非常注意作用域問題。
例子:新建一個【HTTP請求默認值】,填寫發起百度請求的信息,那么在實際發起百度請求的時候,就可以忽略這部分信息了。
執行結果如下:
5.7.4:用戶定義的變量
主要用於進行參數化設計,但只適用於數據量比較少的參數化,大數量的參數化就不適用了,重要的事情每次都需要強調下:需要注意作用域的問題。
使用方法:添加元件后,填寫變量信息即可,填寫完后,就可以在作用域范圍下的元件進行引用,如下圖:
執行結果:
5.7.5CSV設置文件
用於進行批量參數化,有兩種方式,第一種是Jmeter自帶的CSV配置文件,第二種是插件管理器安裝的Random CSV Data Set Config。
1、Jmeter自帶的CSV配置文件:該元件只能按照提供的數據源文件按順序取值。下面進行元件頁面各項值的介紹。
(1)文件名:選擇提供數據的文件,要選擇.csv格式的文件
(2)文件編碼:選擇對文件的編碼格式,一般選utf-8
(3)變量名稱:給獲取到的數據源數據取變量,要取多個數據,就要用英文下分號";"間隔
(4)忽略首行:選擇True就是忽略數據源的首行,選擇False就是不忽略
(5)其他選項:一般默認即可。
下面實際使用:
(1)准備CSV源文件:
(2)填寫CSV參數化元件信息:
(3)引用參數化的值
執行結果:
注意事項:該CSV參數化元件只能按順序取值,即:腳本一次執行下,只能在數據源文件從上往下取值,下面我給請求添加循環數看看現象。
執行結果:
有時候我們想要每次執行請求都能隨機取數據源的某一條數據,那么這時候就需要用到第二種CSV參數化配置文件:Random CSV Data Set Config
2、Random CSV Data Set Config:該元件Jmeter不會自帶,需要我們手動安裝。
(1)打開插件管理器
(2)安裝Random CSV Data Set
使用介紹
Filename:選擇數據源文件路徑
File encoding:選擇編碼格式,一般選擇UTF-8
Delimeter:分隔符,默認即可
Variable names:給變量命名
Fist line is CSV header:如果第一行是表頭,則勾選下
其他沒介紹到的默認即可,不用關心
下面進行實際使用
(1)信息配置:
(2)執行結果:
5.8后置處理器(Post Processors)
用於對sampler發出請求后得到的服務器響應進行處理,一般用來提取響應中的特定數據(類似LoadRunner中的關聯)。
例如:我們在做接口測試的時候,難免會遇到一個接口的請求參數是另一個接口的響應結果,這個時候就需要用到后置處理器來處理我們的請求參數,如系統登錄成功后我們要回去sessionid,在后面業務操作中服務器會驗證這個sessionid,獲取sessionid的這個過程,就是用后置處理器中的正則表達式提取器來完成的
后置處理器常用於處理響應數據,提取某個值
路徑:線程組(用戶)->添加->后置處理器();我們可以清楚地看到JMeter5中共有11個后置處理器
Jeter自帶的后置處理器,如下圖所示。
5.8.1CSS/JQuery提取器
CSS/JQuery提取器,是通過css選擇器定位頁面元素並讀取數據 。
1、我們先來看看這個 CSS/JQuery提取器 長得是啥樣子,路徑:線程組 > 添加 > 后置處理器 > CSS/JQuery提取器,如下圖所示:
關鍵參數如下說明:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Apply to:
Main sample only 僅適用於主要樣本
Sub-samples only 僅適用於子樣本
Main sample and sub-samples 主要樣本和子樣本
JMeter Variable Name to use 用作Jmeter變量名稱
Name of created variable:引用名稱 也就是jmeter里面的變量
CSS Selector expression:CSS選擇器表達式 CSS表達式
Attribute:屬性 要提取的元素的屬性。示例:<input type="checkbox" name="colors" value="blue" id="blue">藍色<br>,那么這里的屬性就是value,因為我們要提取blue
Match No.(0 for Random):匹配數字 0隨機一個,否則索引(從1開始)
Default Value: 缺省值 在無法提取內容的情況下放入變量的值。
CSS選擇器或JQuery選擇器是Jmeter支持的兩種語法,下面對其兩種語法進行簡單介紹
1、新建測試計划,線程組下添加訪問 博客園主頁的取樣器,如下圖所示:
2、然后再添加CSS/JQuery提取器,如下圖所示:
其中CSS選擇器表達式就按如下圖的方法獲取,如下圖所示:
3、接着再添加一個取樣器 用來確認是否提取到我們要提取的東西,提取出來的值用來傳參,如下圖所示:
4、配置好以后,點擊“保存”,運行JMeter,查看表格結果(可以看到提取的路徑就是我們要提取博客園的新聞路徑),如下圖所示:
實例2
1、新建測試計划,線程組下添加隨機變量和訪問 JMeter主頁的取樣器,如下圖所示:
線程組
隨機變量
取樣器
然后再添加CSS/JQuery提取器,如下圖所示:
接着再添加一個取樣器 用來確認是否提取到我們要提取的東西,提取出來的值用來傳參,如下圖所示:
配置好以后,點擊“保存”,運行JMeter,查看表格結果(可以看到提取的路徑就是我們要提取博客園的新聞路徑),如下圖所示:
5.8.2 json提取器
JSON 提取器可以使用JSON-PATH語法從JSON格式的響應中提取數據。
該后處理器與正則表達式提取器非常相似。必須將其放置為HTTP Sampler或具有JSON響應的任何其他取樣器的子級,可以以非常簡單的方式提取JSON文本內容。
1、我們先來看看這個JSON提取器長得是啥樣子,路徑:線程組 > 添加 > 后置處理器 > JSON提取器,如下圖所示:
關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Update Once Per Iteration:標識是否每輪迭代更新一次元素;
Apply to(應用范圍):
Main sample and sub-samples:應用於主sample及子sample
Main sample only:默認的是這個,應用於主sample
Sub-samples only:應用於子sample
JMeter Variable Name to use:應用於變量命名的內容
Name of created Variable:保存的變量名,后面使用${Variable names}引用
JSON Path Expression:json表達式
Match No.(0 or Random):匹配的值是哪一個,默認不填寫是獲取符合條件的第一個,這個與正則表達式的類似(0為隨機、N為獲取第N個、-1獲取所有)
Compute comcatemation var(suffix_ALL):如果發現許多結果,插件將使用“,”分隔符將它們連接起來,並將其存儲在名為<variable name>_ALL的var中
Default Values:當沒有獲取到參數值時的默認值
實例
新建測試計划,線程組下添加天氣預報接口取樣器,如下圖所示:
然后再在取樣器下添加JSON提取器,如下圖所示:
緊接着再添加一個取樣器 度娘,用來獲取提取的status,提取出來的值用來傳參,如下圖所示:
配置好以后,點擊“保存”,運行JMeter,查看表格結果,如下圖所示:
度娘請求結果:
5.8.3JSR223 后置處理程序
我們先來看看這個JSR223 后置處理程序長得是啥樣子,路徑:線程組 > 添加 > 后置處理器 > JSR223 后置處理程序,如下圖所示:
關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
parameter:要傳遞到腳本文件或腳本的參數列表;
file name:用於執行的腳本文件,若沒有腳本文件,將執行腳本;
Script:傳遞給JSR223執行的腳本;如果提供了腳本文件,則執行腳本文件,否則執行腳本。
5.8.4調試后置處理程序
調試后置處理程序,使用正則表達式為從另一個HTTP請求中提取的HTTP參數指定動態值,配合regular expression extractor使用。暫時沒找到好的例子,后面想到補充。。
1、我們先來看看這個調試后置處理程序長得是啥樣子,路徑:線程組 > 添加 > 后置處理器 > 調試后置處理程序,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Regular Expression Reference Name:調用的正則表達式提取器中的引用名稱;
Parameter names regexp group number:用於提取參數名稱的正則表達式的組編號;
Parameter values regex group number:用於提取參數值的正則表達式的組編號。
5.8.5JDBC 后置處理程序
JDBC 后置處理程序,實際上JIBC PostProcessor就是一個JDBC Request,它與JDBC Request功能相同,都可以執行SQL語句。在測試的過程中可能會遇到這樣的測試場景:我們用JDBC Request修改了一些數據,當測試完成后,我們希望還原到原先狀態,此時我們可以用JDBC PostProcessor來完成,當然用JDBC Request也可以完成。具體的JDBC PostProcessor的使用參考宏哥關於JDBC Request的這篇文章:Jmeter(七) - 從入門到精通 - 建立數據庫測試計划實戰<MySQL數據庫>(詳解教程)。
我們先來看看這個JDBC 后置處理程序長得是啥樣子,路徑:線程組 > 添加 > 后置處理器 > JDBC 后置處理程序,如下圖所示:
5.8.6結果狀態處理器
結果狀態處理器,實際上在測試的時候我們也經常會遇到這樣的測試場景:在一些測試用例失敗之后我們需要進行一些操作,例如停止測試,這里可以使用結果狀態處理器。
1、我們先來看看這個結果狀態處理器長得是啥樣子,路徑:線程組 > 添加 > 后置處理器 > 結果狀態處理器,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Language:語言,開發腳本選擇的語言,使用的JSR223語言,可根據需要選擇;
Parameters:參數,傳遞給腳本的參數;
File Name:文件名,本地開發的腳本文件(會覆蓋在JMeter里編寫的腳本);
Script compilation caching:存儲編譯的腳本,默認勾選;
Script:要運行腳本。編寫腳本的區域。
5.8.7XPath提取器
Xpath提取器,如果請求返回的消息為xml或html格式的,可以用XPath提取器來提取需要的數據。
1、我們先來看看這個 Xpath提取器長得是啥樣子,路徑:線程組 > 添加 > 后置處理器 > Xpath提取器,如下圖所示:
2、關鍵參數說明如下:
APPly to:作用范圍(返回內容的斷言范圍)
Main sample and sub-samples:作用於父節點的取樣器及對應子節點的取樣器
Main sample only:僅作用於父節點的取樣器
Sub-samples only:僅作用於子節點的取樣器
JMeter Variable:作用於jmeter變量(輸入框內可輸入jmeter的變量名稱)
XML Parsing Options:要解析的XML參數
UseTidy:當需要處理的頁面是HTML格式時,必須選中該選項;如果是XML或XHTML格式(例如RSS返回),則取消選中;
Quiet表示只顯示需要的HTML頁面,
Report errors表示顯示響應報錯,
Show warnings表示顯示警告;
Use Namespaces:如果啟用該選項,后續的XML解析器將使用命名空間來分辨;
Validate XML:根據頁面元素模式進行檢查解析;
Ignore Whitespace:忽略空白內容;
Fetch external DTDs:如果選中該項,外部將使用DTD規則來獲取頁面內容;
Return entire XPath fragment of text content:返回文本內容的整個XPath片段;
Reference Name:存放提取出的值的參數。
XPath Query:用於提取值的XPath表達式。語法參考:XPath
匹配數字:取第幾個匹配結果,0隨機,-1全部,1代表第一個,2代表第二個,....以此類推
Default Value:參數的默認值。
實例:
1、新建測試計划,線程組下添加1個取樣器 天氣預報,如下圖所示:
2、天氣預報返回HTML,然后再添加xpath提取器,如下圖所示:
舉例://div[@class='w_city city_guonei']//a/@href
選取div下帶有class屬性為w_city city_guonei的href屬性節點。
注釋://div選取了div節點的所有子節點
@選取屬性
/@href 從根節點選取所有的href屬性
Xpath提取器設置
繼續添加GetWeatherInfo取樣器,獲取xpath提取到的參數,如下圖所示:
配置好以后,點擊“保存”,運行JMeter,查看表格結果(取樣器訪問博客園首頁和訪問度娘間隔3s),如下圖所示:
5.8.8XPath2 Extractor
Xpath2提取器,雖然JMeter官方文檔說可以使用XPath2查詢語言從結構化響應(XML或(X)HTML)中提取值,但目前測試只支持從XML響應中提取值;從HTML中提取會報錯,這個可以通過查看結果樹中選擇XPath2 Tester來驗證。
1、我們先來看看這個 Xpath2提取器長得是啥樣子,路徑:線程組 > 添加 > 前置處理器 > Xpath2提取器,如下圖所示:
2、關鍵參數說明如下:
APPly to:作用范圍(返回內容的斷言范圍)
Main sample and sub-samples:作用於父節點的取樣器及對應子節點的取樣器
Main sample only:僅作用於父節點的取樣器
Sub-samples only:僅作用於子節點的取樣器
JMeter Variable:作用於jmeter變量(輸入框內可輸入jmeter的變量名稱)
Return entire XPath fragment of text content:返回文本內容的整個XPath片段;
Name of created variable:存放提取出的值的參數。
XPath Query:用於提取值的XPath表達式。
Match No 匹配數字:取第幾個匹配結果,0隨機,-1全部,1代表第一個,2代表第二個,....以此類推
Default Value:參數的默認值。
Namespaces aliases list:命名空間別名列表。就是這個功能,能讓使用命名空間比使用舊的XPath提取器更方便。關於命名空間含義,可以看官方文檔:XML 命名空間,但是寫的不夠詳細,詳細的參考這里:XML 命名空間(XML Namespaces)介紹以及節點讀取方法。由於XPath2對於表達式的要求比較嚴格,對於帶命名空間的XML(包括默認的命名空間),使用不帶命名空間前綴的表達式是查詢不到結果的。
5.8.9BeanShell 后置處理程序
BeanShell 后置處理程序,如果請求返回的消息為xml或html格式的,可以用XPath2提取器來提取需要的數據。這個估計是JMeter5.0新加的吧,具體用法和Xpath提取器的應該差不多的,可以參考上邊Xpath提取器的用法。
1、我們先來看看這個 BeanShell 后置處理程序長得是啥樣子,路徑:線程組 > 添加 > 后置處理器 > BeanShell 后置處理程序,如下圖所示:
2、關鍵參數說明如下:
Reset bsh.Interpreter before each call: 每次迭代是否重置解釋器
Reset Interpreter :false
Parameters to be passed to BeanShell(=>String Parameters and String []bsh.args) 參數傳遞,字符串或者數組
Parameters:
Script file(overrides script): 腳本文件
File Name:
Script(variables:ctx vars props prev data log): 腳本編輯()
實例:
列舉一個簡單的例子,響應結果中有中文亂碼,使用BeanShell 后置處理程序來處理中文亂碼。
1、新建測試計划,線程組下添加1個取樣器 訪問度娘,如下圖所示:
https://www.cnblogs.com/du-hong/p/13217399.html
然后再添加BeanShell 后置處理程序,設置腳本:prev.setDataEncoding("UTF-8"); ,如下圖所示:
3、配置好以后,點擊“保存”,運行JMeter,禁用BeanShell 后置處理程序,查看表格結果(中文亂碼),如下圖所示:
(1)禁用BeanShell 后置處理程序,查看表格結果(有中文亂碼)
(2)啟用BeanShell 后置處理程序,查看表格結果(無中文亂碼)
5.9斷言 (Assertions)
斷言時自動化測試中最重要且繞不開的一個概念,讓自己的程序盡可能像人一樣去做判斷,這是自動化測試需要實現的重要功能
JMeter中的斷言用於檢查測試中得到的響應數據等是否符合預期,Assertions一般用來設置檢查點,用以保證性能測試過程中數據交互與預期一致(它的作用和LoadRunner中的檢查點類似)
JMeter中斷言的原理:在Request的返回層面,增加一層判斷機制,因為Request成功了,並不代碼結果一定正確
一個Sampler可以添加多個斷言,根據你的檢查需求來添加相應的斷言,多個斷言屬於並的操作。當Sampler下所有的斷言都通過了,那么才算是請求成功
JMeter自帶的斷言,如下圖所示:
5.10監聽器(Listener)
JMeter中的監聽器,是對測試結果進行處理和可視化 展示的一系列組件,能夠顯示取樣器請求和響應的細節以及請求結果,包括消息頭,請求的數據,響應的數據
常用的監聽器有圖形結果、查看結果樹、集合報告等
1. 監聽器放的位置不同,查看的結果也不同。 在線程組下添加監聽器,查看線程組下所有請求的結果; 放在具體某個請求下,只查看此請求的結果; 若放在某個控制器節點下,則查看此控制器下節點執行的結果;
2. 該監聽器推薦做調試用,在實際運行壓測時,應該禁用。因為大量 請求時,啟用監聽器時打印的日志比較多,會造成大IO消耗,影響 壓力機性能。
3. 不同的監聽器,通過不同的方式,展示服務器響應信息,但是它們 原始結果數據都是一樣的。
4. JMeter監聽器有兩種方式存儲監聽記錄:
1)默認保存方式:CSV格式。占用磁盤比較少,推薦使用這種方式 保存。
2) 保存方式:保存數據最全面,但是占用內存大。 JMeter自帶的監聽器,如下圖所示:
JMeter自帶的監聽器,如下圖所示
5.10.1 察看結果樹
察看結果樹,顯示取樣器請求和響應的細節以及請求結果,包括消息頭,請求的數據,響應的數據。
(1)察看結果樹,放的位置不同,查看的結果也不同。在線程組下添加察看結果樹,查看線程組下所有請求的結果;放在具體某個請求下,只查看此請求的結果;若放在某個控制器節點下,則查看此控制器下節點執行的結果;
(2)該監聽器推薦做調試用,在實際運行壓測時,應該禁用,因為大量請求時,啟用該監聽器時打印的日志比較多,會造成大IO消耗,影響壓力機性能。
1、我們先來看看這個 察看結果樹 長得是啥樣子,路徑:線程組 > 添加 > 監聽器 > 察看結果樹,如下圖所示:
2、關鍵參數說明如下:
名稱:控制器的描述性名稱,顯示在左邊節點上,並用於命名事務
注釋:控制器注釋信息,非必填項
文件名:載入文件名
Log/Display Only: 僅日志錯誤、Success ;勾選中顯示對應的日志信息
Configure:定義report中自己所關心的數據項。
取樣器結果:
Thread Name: 線組名稱
Sample Start: 啟動開始時間
Load time: 加載時長
Latency: 等待時長
Size in bytes: 發送的數據總大小
Headers size in bytes: 發送頭大小
Body size in bytes: 發送數據的其余部分大小
Sample Count: 發送統計
Error Count: 錯誤統計
Response code: 返回碼
Response message: 返回消息
Response headers:返回頭信息
請求
數據獲取方式、路徑、地址等以及傳遞的參數、cookie
響應數據
響應加載的頁面html
3、作用
1)查看請求結果,請求成功的測試通常為綠色;紅色則代表失敗。
注:在沒有對請求斷言的情況下,顯示綠色並不一定是成功,只代表響應碼是200或300系列,顯示紅色說明響應碼是400或500系列。所以要想確定請求返回的是正確的,必須要加上斷言,只有斷言成功才會顯示綠色。
2)查看對應Sampler的測試結果的請求、響應數據。
-
-
- 取樣器結果:顯示的是取樣器相關參數(客戶端參數與響應參數)
- 請求:發送請求的具體內容
- 響應數據:服務器返回的相應參數
-
5.10.2 匯總報告
匯總報告,為測試中的每個不同命名的請求創建一個表行。這與聚合報告類似,只是它使用更少的內存。提供了最簡要的測試結果信息,同時可以配置將相應的信息保存至指定的文件中(支持xml、csv格式的文件)。
單擊Configure按鈕,可以配置結果保存各種選項,具體這里不做說明了。
該監聽器是筆者在調試jmeter項目時常用的監聽器之一。
1、我們先來看看這個 匯總報告 長得是啥樣子,路徑:線程組 > 添加 > 監聽器 > 匯總報告,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Label 取樣器別名,如果勾選Include group name ,則會添加線程組的名稱作為前綴
# Samples 取樣器運行次數
Average 請求(事務)的平均響應時間
Min 請求的最小響應時間
Max 請求的最大響應時間
Std. Dev 響應時間的標准方差
Error % 事務錯誤率
Throughput 吞吐量 也就是TPS
Received KB/sec 每秒收到的千字節
Sent KB/sec 每秒發送的千字節
Avg. Bytes 響應平均流量
5.10.3聚合報告
聚合報告,記錄這次性能測試的總請求數、錯誤率、用戶響應時間(中間值、90%、最少、最大)、吞吐量等,用以幫助分析被測試系統的性能。在聚合報告中,各個響應時間不能超過客戶的要求,就是合格,例如不能超過響應時間2s,大於2s就是不合格的.
聚合報告應該是最詳細的報告了,也是最為常用的報告。是大家在壓測過程中最常用的監聽器。
該監聽器對於每個請求,它統計響應信息並提供請求數,平均值,最大,最小值,中位數、90%、95%、錯誤率,吞吐量(以請求數/秒為單位)和以kb/秒為單位的吞吐量。
單擊Configure按鈕,可以配置結果保存各種選項,具體這里不做說明了。
1、我們先來看看這個 聚合報告 長得是啥樣子,路徑:線程組 > 添加 > 監聽器 > 聚合報告,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Label :每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這里顯示的就是 Name 屬性的值
#Samples :表示測試中一共發出了多少個請求,如果模擬10個用戶,每個用戶迭代10次,那么這里就顯示對應的 HTTP Request的執行次數是100
Average :平均響應時間——默認情況下是單個 Request 的平均響應時間,當使用了 Transaction Controller 時,也可以以Transaction 為單位顯示平均響應時間
Median :50%用戶的響應時間
90%Line :90%用戶的響應時間
Min :最少響應時間
Max :最大響應時間
Error% :本次運行測試中出現錯誤的請求的數量/請求的總數
Throughput :吞吐量,默認情況下表示每秒完成的請求數(Request per Second),當使用了 Transaction Controller 時,也可以表示類似 LoadRunner 的 Transaction per Second 數
接收/發送)KB/sec :每秒從服務器端接收到的數據量,相當於LoadRunner中的Throughput/Sec
5.10.4 后端監聽器
后端監聽器,是一個異步偵聽器,可以將數據推入到數據庫中,提供了InfluxDB,graphite選項
1、我們先來看看這個 后端監聽器 長得是啥樣子,路徑:線程組 > 添加 > 監聽器 > 后端監聽器,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Backend Listener implementation:BackendListenerClient類的實現,Jmeter默認提供如下兩種實現,因為我們使用的influxdb作為持久存儲
org.apache.jmeter.visualizers.backend.graphite.GraphiteBackendListenerClient
org.apache.jmeter.visualizers.backend.graphite.InfluxdbBackendListenerClient 因為我們使用的influxdb作為持久存儲,所以后續只介紹InfluxdbBackendListenerClient
Async Queue size:異步隊列大小 隊列值包含異步處理時的度量標准。除非有一些特定的性能問題,否則最好不要從默認的5000。
3、我們使用InfluxdbBackendListenerClient
-
-
- influxdbMetricsSender:org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender
- influxdbUrl:influx數據庫的url。example : http://influxHost:8086/write?db=jmeter
- application:被測試的應用名稱。此值也作為名為“application”的標記存儲在“events”中
- measurement:使用默認的”jmeter“就行
- summaryOnly:為true的情況下,只輸出所有請求的集合數據報告,為flase的情況下,輸出每條數據的詳情報告、
- samplersRegex:正則表達式將與樣本名稱匹配並發送到后端。默認匹配所有
- testTitle:測試名稱。默認的設置為 Test name。該值作為名為“text”的字段存儲在“事件”度量中。 JMeter在測試的開始和結束時自動生成一個注釋,其值以'started'和'ended'結尾
- percentiles:要發送到后端的百分位數,多個值已
;
分割 - TAG_WhatEverYouWant:自定義標簽。您可以根據需要添加任意數量的自定義標簽。對於它們中的每一個,只需創建一個新行並在其名稱前加“TAG_”
-
5.10.5匯總圖
匯總圖,我們可以看到表格顯示的結果與圖形結果,看着挺復雜,其實稍微翻譯一下就知道,絕大多數都是對圖形的設置。
1、我們先來看看這個 匯總圖 長得是啥樣子,路徑:線程組 > 添加 > 監聽器 > 匯總圖,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Column settings
-
-
- Columns to display 選擇要在圖表中顯示的列
- Rectangles color 單擊右側顏色矩形打開彈出對話框,選擇自定義顏色。(就是點擊
)
-
-
-
- Foreground color 允許更改值文本顏色
- Value font 允許定義文本的字體設置
- Draw outlines bar? 在條形圖上繪制或不繪制邊界線
- Show number grouping? 是否顯示Y軸標簽中的數字分組
- Value labels vertical? 更改值標簽的方向。(默認為水平)
- Column label selection 按結果標簽過濾
-
Title
圖表的頭部定義圖表的標題
Graph size
根據當前JMeter窗口大小的寬度和高度計算圖形大小。使用“ 寬度”和“ 高度”字段定義自定義大小。單位是像素。
X Axis settings
定義X軸標簽的最大長度(以像素為單位)
Y Axis settings
為Y軸定義自定義最大值。
Legend
定義圖表圖例的放置和字體設置
5.10.6斷言結果
斷言結果,對相應的請求添加斷言。對取樣器進行斷言后,我們希望知道斷言結果;此元件可以幫助我們顯示斷言結果(察看結果樹元件中也可以看到)。消耗了大量資源(內存和CPU),性能測試時候不建議使用。
作用:用於檢查測試中得到的響應數據等是否符合預期,用以保證性能測試過程中的數據交互與預期一致,一般與結果樹結合使用。
1、我們先來看看這個 斷言結果 長得是啥樣子,路徑:線程組 > 添加 > 監聽器 > 斷言結果,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空。
5.10.7比較斷言可視化器
比較斷言可視化器,和比較斷言配合使用。
1、我們先來看看這個 比較斷言可視化器 長得是啥樣子,路徑:線程組 > 添加 > 監聽器 > 比較斷言可視化器,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空。
5.10.8生成概要結果
生成概要結果,該測試元素可以放置在測試計划中的任何位置。生成到目前為止對日志文件和/或標准輸出的測試運行的摘要。顯示了運行總計和差異總計。在適當的時間邊界每n秒(默認為30秒)生成一次輸出,因此將同步在同一時間運行的多個測試。
1、我們先來看看這個 生成概要結果 長得是啥樣子,路徑:線程組 > 添加 > 監聽器 > 生成概要結果,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空。
5.10.9 圖形結果
圖形結果,通過圖形展示出本次性能測試數據的分布。 圖形結果一般作為聚合報告的分析輔佐
1、我們先來看看這個 圖形結果 長得是啥樣子,路徑:線程組 > 添加 > 監聽器 > 圖形結果,如下圖所示:
2、關鍵參數說明如下:
名稱:控制器的描述性名稱,顯示在左邊節點上,並用於命名事務
注釋:控制器注釋信息,非必填項
文件名:載入文件名
Throught:吞吐量,可以理解成TPS(TPS表示每秒通過的事物數,QPS表示每秒查詢接口數。jmeter中如果只有單接口,那么TPS=QPS。如果是多接口的混合場景,只有在事物控制器下執行,才能將其理解為TPS)
-
-
-
樣本數目。在這里,我們可以把樣本數量簡單理解成是jmeter一共向服務器發起了多少次請求;
-
最新樣本。jmeter最后一次發送請求的響應時間。單位是毫秒;
-
平均。所有請求響應時間的平均值。單位是毫秒;
-
偏離。標准方差,學過統計學的同學應該知道這個概念。如果你對這個概念一無所知也沒有關系,偏離越小就代表測試的總體結果與平均值越接近;
-
吞吐量。被測系統每分鍾能處理的請求個數,這是判斷服務器性能好壞的重要指標(也可以說是最重要的指標)。在上面的圖形結果報表里我們可以看到系統的吞吐量是138.985每分鍾,這就代表着系統每分鍾可以處理138.985個請求;
-
中值。就是響應時間的中間值,學術一點中值指的是有50%的值大於這個值,另外50%的值小於這個值。蒙圈了吧?實際上中值指的是如果有9個數,那么我們從小到大排列這些數,排在第5個的數就是這一組數的中值。那么如果有10個數呢?10個數的話第5個和第6個數的平均值就是這組數字的中值;
-
-
5.10.10 JSR223 Listener
SR223 Listener,允許將JSR223腳本代碼應用於示例結果。
1、我們先來看看這個 SR223 Listener 長得是啥樣子,路徑:線程組 > 添加 > 監聽器 > JSR223 Listener,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
Label 取樣器別名,如果勾選Include group name ,則會添加線程組的名稱作為前綴
# Samples 取樣器運行次數
Average 請求(事務)的平均響應時間
Min 請求的最小響應時間
Max 請求的最大響應時間
Std. Dev 響應時間的標准方差
Error % 事務錯誤率
Throughput 吞吐量 也就是TPS
Received KB/sec 每秒收到的千字節
Sent KB/sec 每秒發送的千字節
Avg. Bytes 響應平均流量
5.10.11郵件觀察儀
郵件觀察儀, 如果測試運行從服務器收到太多失敗的響應,則可以將郵件程序可視化工具設置為發送電子郵件,這個不錯,起到及時通知效果,下面我使用的是163 SMTP進行測試。可以實現。
1、我們先來看看這個 郵件觀察儀 長得是啥樣子,路徑:線程組 > 添加 > 監聽器 > 郵件觀察儀,如下圖所示:
2、配置好以后,點擊“Test Mail”,提示發送郵件成功。如下圖所示
3、去收件箱查看,如下圖所示:
5.10.12響應時間圖
響應時間圖,響應時間圖形監聽器。有點和我們之前介紹的Aggregate Graph類似
1、我們先來看看這個 響應時間圖長得是啥樣子,路徑:線程組 > 添加 > 監聽器 > 響應時間圖,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
2.1 Graph setting 圖片設置
2.2 Interval:橫坐標的刻度
2.3 Title 標題 默認
2.4 Line setting 線條設置 默認
2.5 Graph size 圖片尺寸 默認
2.6 X Axis 橫坐標 默認
2.7 Y Aixs 縱坐標
2.8 Scale maximum value 縱坐標長度
2.9 increment scale 縱坐標的刻度 ;Legend 字體設置 默認
- Interval (ms) X軸間隔的時間(以毫秒為單位)
- Sampler label selection 按結果標簽過濾。可以使用正則表達式
- Title 在圖表的頭部定義圖表的標題
- Line settings 定義線條的寬度
- Graph size 根據當前JMeter窗口大小的寬度和高度計算圖形大小。使用“ 寬度”和“ 高度”字段定義自定義大小。單位是像素。
- X Axis settings 自定義X軸標簽的日期格式
- Y Axis settings 為Y軸定義自定義最大值(以毫秒為單位)
- Legend 定義圖表圖例的放置和字體設置
5.10.13保存響應到文件
保存響應到文件,我們可以看到表格顯示的結果與圖形結果,看着挺復雜,其實稍微翻譯一下就知道,絕大多數都是對圖形的設置。
1、我們先來看看這個 保存響應到文件 長得是啥樣子,路徑:線程組 > 添加 > 監聽器 > 保存響應到文件,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空;
文件名稱前綴:設置響應文件所在路徑(路徑必須已存在)和文件前綴
Save Failed Responses only:只保存失敗的響應
Save Successful Responses only:只保留成功的響應
Don't add number to prefix:不添加數字到文件名前綴
Don't add suffix:不添加文件后綴,即擴展名(注:默認情況下,jmeter會根據服務器返回的結果自動生成合適類型的文件,比如服務器返回json格式的內容,jmter會自動生成.json文件)
Add timestamp:添加時間戳到文件前綴
Minimum Length of sequence number :最小序列號,不填默認從1開始。
5.10.14簡單數據寫入器
簡單數據寫入器,對用來記錄取樣器響應結果,不會以圖形方式顯示。配合NON GUI模式使用。
1、我們先來看看這個 簡單數據寫入器 長得是啥樣子,路徑:線程組 > 添加 > 監聽器 > 簡單數據寫入器,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空。
5.10.15用表格查看結果
用表格查看結果,這個listener用來顯示每個請求的響應頭信息,我覺得它最好用的一點就是可以按先后順序顯示每個請求的開始時間、耗時、響應狀態等,方便進行結果分析。
1、我們先來看看這個 用表格查看結果 長得是啥樣子,路徑:線程組 > 添加 > 監聽器 > 用表格查看結果,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空。
Sample # : 一個系列號,我們線程用戶設置了5,這里就有5個號
Start Time:每個用戶的開始時間,我們設置了1秒進5個用戶,所以,每個用戶進入時間不同,這里精確到毫秒。
Thread Name:線程名稱,注意1-1,1-5,第一個1我也不知道表示什么,后面的1到5很好理解,就是用戶1到用戶5.
Label:就是Http reques的名稱
Sampler Time:運行這個Sampler所消耗的時間,有時候也等於Duration time
Status:執行結果標記,成本綠勾,失敗紅叉。
Bytes:請求的響應文件大小
Sent Byte:發送HTTP請求的數據包大小
Latency:這個字面意思是潛伏時間,不是延遲,暫時不好理解和解釋。一個網絡術語
Connet Time: 連接到服務器消耗的時間。
5.10.16BeanShell Listener
BeanShell Listener,通過BeanShell 監聽器可以訪問JMeter提供的屬性和變量
1、我們先來看看這個 BeanShell Listener 長得是啥樣子,路徑:線程組 > 添加 > 監聽器 > BeanShell Listener,如下圖所示:
2、關鍵參數說明如下:
Name:名稱,可以隨意設置,甚至為空;
Comments:注釋,可隨意設置,可以為空。
https://www.cnblogs.com/du-hong/p/13327926.html
https://www.cnblogs.com/liuyuelinfighting/p/14746570.html#tid-nG3yPT
在Jmeter-Gui中,只能編輯一個測試計划,如果需要新創建一個測試計划,就要開啟一個新的Jmeter-Gui窗口界面。