一、斷言簡介
jmeter中有個元件叫做斷言(Assertion)。用於檢查測試中得到的響應數據等是否符合預期,用以保證性能測試過程中的數據交互與預期一致。
使用斷言的目的:在request的返回層面增加一層判斷機制;因為request成功了,並不代表結果一定正確。
使用斷言的方法:
△在選擇的Sampler下添加對應的斷言(因為不同類型的斷言檢查的內容不同);配置好響應的檢查內容(根據斷言情況而定,有的斷言控制面板不需要添加任何內容,如XML Assertion)。
△添加一個斷言結果的監聽器(從監聽器中添加),通過“斷言結果”可以看到是否通過斷言;對於一次請求,如果通過的話,斷言結果中只會打印一行請求的名稱;
如果失敗,則除了請求的名稱外,還會有一行失敗的原因(不同類型的斷言,結果不同)。
PS:一個Sampler可以添加多個斷言,根據你的檢查需求來添加相應的斷言,當Sampler下所有的斷言都通過了,那么才算request成功。
二、斷言的種類
Jmeter4.0有12鍾斷言
三、常用幾種斷言的介紹
1、響應斷言
在sampler下面添加響應斷言
APPly to:適用范圍
Main sample and sub-samples:作用於父節點取樣器及對應子節點取樣器
Main sample only:僅作用於父節點取樣器
Sub-samples only:僅作用於子節點取樣器
JMeter Variable:作用於jmeter變量(輸入框內可輸入jmeter的變量名稱)
要測試的響應字段:要檢查的項
響應文本
響應代碼
響應信息
Response Headers:響應頭部
Request Herders:請求頭部
URL樣本
Documeng(text)
Ignore status:忽略返回的響應報文狀態碼、
Request Datas
模式匹配規則:
包括:返回結果包括你指定的內容
匹配:(好像跟Equals查不多,弄不明白有什么區別)
Equals:返回結果與你指定結果一致
Substring:返回結果是指定結果的字串
否:不進行匹配
或者
要測試的模式:即填寫你指定的結果(可填寫多個),按鈕【添加】、【刪除】是進行指定內容的管理
2、XPath斷言
XPath為XML路徑語言,它是一種用來確定XML(標准通用標記語言的子集)文檔中某部分位置的語言。XPath基於XML的樹狀結構,提供在數據結構樹中找尋節點的能力。
作用對象:針對返回信息為XPAth的數據類型進行斷言。就是如果服務器響應返回的是 xml 格式的內容,這時最佳的斷言驗證類型就是使用 XPath Assertion。
Apply to:適用范圍
Main sample and sub-samples:主要樣本和次級樣本
Main sample only:僅主要樣本
Sub-samples only:僅次級樣本
JMeter Variable:jmeter變量(輸入框內可輸入jmeter的變量名稱)
XML Parsing Options:XML解析選項
Use Tidy(tolerant parser):使用Tidy(容錯解析器),默認選擇quiet(不顯示)
Quiet:不顯示
Report errors:錯誤報告
Show warnings:顯示錯誤
Use Namespaces:使用名稱空間
Validate XML:驗證XML(文件包/數據)
Ignore Whitespace:忽略空格(這允許你指定語法分析器可以忽略哪個空格,而哪個空格是重要的)
Fetch external DTDs:獲取外部DTDs(一些XML元素具有屬性,屬性包含應用程序使用的信息,屬性僅在程序對元素進行讀、寫操作時,提供元素的額外信息,這時候需要在DTDs中聲明)
XPath Assertion:輸入框中寫入xpath斷言,點擊Validate驗證其正確性
True if nothing matches:確認都不匹配
3、size斷言
用於判斷返回內容的大小,判斷響應結果是否包含正確數量的byte。可定義(=, !=, >, <, >=, <=)
APPly to:應用范圍(返回內容的斷言范圍)
Main sample and sub-samples:作用於父節點取樣器及對應子節點取樣器
Main sample only:僅作用於父節點取樣器
Sub-samples only:僅作用於子節點取樣器
JMeter Variable:作用於jmeter變量(輸入框內可輸入jmeter的變量名稱)
Response Size Field to Test:響應字節的測試范圍(可以選擇用於判斷的響應范圍)
Full Response:全部響應
Response Headers:響應頭部
Response Body:響應主體
響應代碼:響應報文相關的代碼
響應信息:響應報文的信息
Size to Assert:斷言字節范圍
字節大小單位為:字節;比較順序是①返回內容的大小②比較類型③指定字節大小
4、斷言持續時間
作用:用於判斷服務器的響應時間,判斷是否在給定的時間內返回響應結果
APPly to:適用范圍
Main sample and sub-samples:作用於父節點取樣器及對應子節點取樣器
Main sample only:僅作用於父節點取樣器
Sub-samples only:僅作用於子節點取樣器
持續時間(毫秒):響應時間設置(單位:毫秒),如果響應時間大於設置的響應時間,則斷言失敗,否則成功
5、BeanShell斷言
(1)BeanShell斷言介紹
BeanShell是jmeter的解釋型腳本語言,和java語法大同小異,並有自己的內置對象和方法可供使用。 BeanShell斷言可以使用beanshell腳本來執行斷言檢查,可以用於更復雜的個性化需求,使用更靈活,功能更強大,但是要能夠熟練使用beanshell腳本。
作用對象:針對sampler中的Bean Shell sampler而使用的斷言
Name名稱:斷言的名字(可以用一個比較容易理解和分辨的名稱)
Comments注釋:對這個斷言進行一個解釋,備注
Reset bsh.interpreter before each call:在每次調用Bean Shell之前重置bsh.interpreter類(bsh.interpreter是Bean Shell腳本語言的一種類,也可以理解為一種解析器)
Parameters參數(String Parameters and String []bsh.args):String參數(String []bsh.args是主類main函數的形式參數,是一個String 對象數組,可以用來獲取命令行用戶輸入進去的參數)
Script file腳本文件:可以填入腳本文件路徑
Script(see below for variables that are defined):參照下文定義的變量(使腳本文件參照定義的變量來運行)
(2)BeanShell斷言實例
JMeter在它的BeanShell中內置了變量,用戶可以通過這些變量與JMeter進行交互,其中主要的變量及其使用方法如下:
log:寫入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);
ctx:該變量引用了當前線程的上下文,使用方法可參考:org.apache.jmeter.threads.JMeterContext。
vars - (JMeterVariables):操作jmeter變量,這個變量實際引用了JMeter線程中的局部變量容器(本質上是Map),它是測試用例與BeanShell交互的橋梁,常用方法:
a) vars.get(String key):從jmeter中獲得變量值
b) vars.put(String key,String value):數據存到jmeter變量中
更多方法可參考:org.apache.jmeter.threads.JMeterVariables
props - (JMeterProperties - class java.util.Properties):操作jmeter屬性,該變量引用了JMeter的配置信息,可以獲取Jmeter的屬性,它的使用方法與vars類似,但是只能put進去String類型的值,而不能是一個對象。對應於java.util.Properties。
a) props.get("START.HMS"); 注:START.HMS為屬性名,在文件jmeter.properties中定義
b) props.put("PROP1","1234");
prev - (SampleResult):獲取前面的sample返回的信息,常用方法:
a) getResponseDataAsString():獲取響應信息
b) getResponseCode() :獲取響應code
更多方法可參考:org.apache.jmeter.samplers.SampleResult
sampler - (Sampler):gives access to the current sampler
在這里除了可以使用beanshell的內置變量外,主要通過 Failure 和 FailureMessage來設置斷言結果。
簡單實例:
斷言結果: