Jmeter里的斷言相當於lr中的檢查點。用於檢查測試中得到的響應數據等是否符合預期,用以保證性能測試過程中的數據交互與預期一致。
使用斷言的目的:在request的返回層面增加一層判斷機制;因為request成功了,並不代表結果一定正確。
使用斷言的方法:
△在選擇的Sampler下添加對應的斷言(因為不同類型的斷言檢查的內容不同);配置好響應的檢查內容(根據斷言情況而定,有的斷言控制面板不需要添加任何內容,如XML Assertion)。
△添加一個斷言結果的監聽器(從監聽器中添加),通過“斷言結果”可以看到是否通過斷言;對於一次請求,如果通過的話,斷言結果中只會打印一行請求的名稱;
如果失敗,則除了請求的名稱外,還會有一行失敗的原因(不同類型的斷言,結果不同)。
PS:一個Sampler可以添加多個斷言,根據你的檢查需求來添加相應的斷言,當Sampler下所有的斷言都通過了,那么才算request成功。
目前最新版本5.1.1版本里有13個斷言:
1、響應斷言

這里介紹下模式匹配規則:
包括:返回結果包括你指定的內容
匹配:(好像跟Equals查不多,弄不明白有什么區別)
Equals:返回結果與你指定結果一致
Substring:返回結果是指定結果的字串
否:不進行匹配
要測試的模式:即填寫你指定的結果(可填寫多個),按鈕【添加】、【刪除】是進行指定內容的管理
#案例:百度搜索:哈哈 的請求。
1)測試模式填寫了兩個如下【值匹配成功】

查看結果樹可以看到,請求成功,則說明響應數據里包含這兩個數據。

2)填寫兩個響應數據里沒有的數據,【值匹配失敗】如下:

查看結果樹,查看斷言失敗了,並且提示沒有該匹配數據。
總結:一般如何沒有斷言錯誤,則可以證明該請求成功了,這里的斷言作用和lr里的檢查點是一樣的。
2、json斷言

參數:
Assert JSON Path exists : $.后面添加你想要檢查的json字段。
Addittionally assert value: 是否添加斷言值, 添加的斷言值和json返回的字段值進行比較,等於特定的值。
Match as regular expression: 是否支持正則表達式。
Expected Value: 添加斷言值。
Expect null: 預期空值,勾選這項,則會匹配斷言結果為null的情況。
Invert assertion : 取反,若上述斷言結果為true,勾選此項,則斷言結果為false ;
若上述斷言結果為false,勾選此項,則斷言結果為true。
#案例:如下圖該請求返回一個json串。

1)【匹配特定值】添加json斷言,匹配front,如下圖:

查看結果樹,可以看到請求成功。

填寫斷言值為front444,匹配失敗,如下圖:

2)【匹配正則表達式】Match as regular expression一定要勾上。
匹配成功示例,匹配17位數,字和一個*號,這里的*號要加 \ 進行轉義,如圖匹配:

匹配失敗示例:改為16位數字,匹配失敗:

3)【預期為null】
4)【取反】這里就不演示啦。
【規則】這里說下取json匹配字段的規則
- $ 根節點
- @ 現行節點
- . 子節點
- .. 不管位置,選擇所有符合條件的
- * 匹配所有元素節點
- [,] 支持迭代器中做多選
- ?() 支持過濾操作
- [] 迭代器的標示,子元素操作符
- () 支持表達式計算
3、大小斷言
4、JSR233斷言
5、XPath斷言
6、HTML斷言
7、MD5Hex斷言
8、SMIME斷言
9、XML Schema斷言
10、XML斷言
11、斷言持續時間
12、比較斷言
13、Beanshell斷言
BeanShell之前關於定時器的隨筆中有介紹過,是一種松散類型的腳本語言(這點和JS類似),一種完全符合java語法的java腳本語言,並且又擁有自己的一些語法和方法;
作用對象:針對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):參照下文定義的變量(使腳本文件參照定義的變量來運行)
這里重點介紹了前兩個斷言,和beanshell斷言,其他的還未用到,用到的時候再補充啦~~~
