1.簡介
最近由於宏哥在搭建自己的個人博客可能更新的有點慢。斷言組件用來對服務器的響應數據做驗證,常用的斷言是響應斷言,其支持正則表達式。雖然我們的通過響應斷言能夠完成絕大多數的結果驗證工作,但是JMeter還是為我們提供了適合多個場景的斷言元件,輔助我們來更好的完成結果驗證工作。在使用JMeter進行性能測試或者接口自動化測試工作中,經常會用到的一個功能,就是斷言,斷言相當於檢查點,它是用來判斷系統返回的響應結果是否正確,以此幫我們判斷測試是否通過。
2.預覽斷言
首先我們來看一下JMeter的斷言,路徑:線程組(用戶)->添加->斷言;我們可以清楚地看到JMeter5中共有13個斷言(不包括jp@gc開頭的斷言,這個是宏哥安裝的插件),如下圖所示:
如果上圖您看得不是很清楚的話,宏哥總結了一個思維導圖,關於JMeter5的斷言類型,如下圖所示:
通過以上的了解,我們對斷言有了一個大致的了解和認識。下面宏哥就給小伙伴或則童鞋們分享講解一些通常在工作中會用到的斷言。
3.常用斷言詳解
這一小節,宏哥就由上而下地詳細地講解一下常用的斷言。
3.1 響應斷言
響應斷言,判斷返回消息中的內容。響應斷言是最常用的一種斷言方法,它可以對各種返回類型的結果進行斷言,比如Test、html、application/json等
1、我們先來看看這個 響應斷言 長得是啥樣子,路徑:線程組 > 添加 > 斷言 > 響應斷言,如下圖所示:
2、關鍵參數說明如下:
名稱:控制器的描述性名稱,顯示在左邊節點上,並用於命名事務
注釋:控制器注釋信息,非必填項
APPly to:選項默認即可,Main sample only(僅作用於父節點取樣器)
Main sample and sub-samples:作用於父節點取樣器及對應子節點取樣器
Main sample only:僅作用於父節點取樣器
Sub-samples only:僅作用於子節點取樣器
JMeter Variable Name to use:作用於jmeter變量(輸入框內可輸入jmeter的變量名稱)
要測試的響應字段
- 響應文本
服務器響應文本,一般情況下,我們都是勾選改選項,用於驗證服務器返回值。
- Document(text)
通過 Apache Tika 從各種的文檔中提取的文本進行驗證,包括響應文本,pdf、word 等等各種格式。jmeter 會用Apache Tika 去解析服務器響應內容,耗內存、也耗時間,解析易失敗,盡量少用或不用。多用響應文本方式來進行斷言驗證
- URL 樣本
對請求的 url 進行斷言,如果請求沒有重定向(302),那么該url 即為請求的 url;如果有重定向(切跟隨重定向),那么url 則包含了請求 url 和重定向 url。
- 響應代碼
即 http 響應代碼,例如 200,404 等等,需要注意:由於 jmeter 默認情況下認為 4xx,5xx 時該請求失敗,所以在斷言這類響應代碼時,需要同時勾選 Ingore Status,才能正常去做斷言。
- 響應信息
即響應代碼對應的信息,例如 OK, Not Found 等等這類的。如下常見類似是響應信息:
HTTP/1.1 200 Ok
HTTP/1.1 302 Found
Response Header : 響應頭信息,例如
Server: Tengine Date: Thu, 12 Mar 2015 09:43:52 GMT
Content-Type: text/html
Content-Length: 260
Connection: close
Location: http://www.baidu.com/404.html
Response Headers
即 http 響應頭信息,主要用於斷言當響應頭帶有唯一或特定意義時。
ngore Status請參見 4 響應代碼的使用說明。
模式匹配規則
包括: 指返回結果包含要測試的模式中指定的內容,支持正則表達式
匹配:(1)相當於 equals。返回值是固定的,可以以返回值做斷言,效果同 equals;(2)正則表達式匹配。用正則表達式來匹配返回結果,但必須全部匹配。即正則表達式必須能匹配整個返回值,而不是返回部分值,注意與包括模式的區別(包括是支持模糊匹配的)。
Equals:指返回結果與指定的測試模式完全一致。
Substring:與“包括”模式差不多,都是指返回結果包括指定的內容,但 Substring 不支持正則表達式。
否:相當於取反。即如果上述斷言結果為 true,勾選“否”選項后,則最終斷言結果為 false。
注:在使用該斷言時,熟練掌握正則表達式是必備的能力。
測試模式 可以添加你需要斷言的部分,如果是包括,就可以添加多個
3.2JSON斷言
JSON斷言也是測試工作中經常用到的一種斷言方法,它只能針對響應結果是applicaton/json格式的請求進行斷言。適用於返回消息是JSON格式
1、我們先來看看這個 JSON斷言長得是啥樣子,路徑:線程組 > 添加 > 斷言 > JSON斷言,如下圖所示:
2、關鍵參數說明如下:
名稱:控制器的描述性名稱,顯示在左邊節點上,並用於命名事務
注釋:控制器注釋信息,非必填項
Assert JSON Path exists: json路徑
Additionally assert value:等於特定值
Match as regular expression:正則匹配
Expect null:空值
Invert assertion(will fail if above conditions met):上面的條件滿足則fail
3.3大小斷言
大小斷言,顯示取樣器請求和響應的細節以及請求結果,包括消息頭,請求的數據,響應的數據。判斷響應結果是否包含正確數量的byte。可定義(=, !=, >, <, >=, <=)
1、我們先來看看這個 大小斷言 長得是啥樣子,路徑:線程組 > 添加 > 斷言 > 大小斷言,如下圖所示:
2、關鍵參數說明如下:
名稱:控制器的描述性名稱,顯示在左邊節點上,並用於命名事務
注釋:控制器注釋信息,非必填項
Response Size Field to Test:響應字節的測試范圍(可以選擇用於判斷的響應范圍)
Full Response:全部響應
Response Headers:響應頭部
Response Body:響應主體
響應代碼:響應報文相關的代碼
響應信息:響應報文的信息
Size to Assert:斷言字節范圍
字節大小單位為:字節;
3.4 JSR223 斷言
JSR223即Java 規范請求,是指向JCP(Java Community Process)提出新增一個標准化技術規范的正式請求;
作用對象:針對取樣器中的JSR223 sampler而使用的斷言
1、我們先來看看這個 JSR223斷言 長得是啥樣子,路徑:線程組 > 添加 > 斷言 > JSR223斷言,如下圖所示:
2、關鍵參數說明如下:
名稱:控制器的描述性名稱,顯示在左邊節點上,並用於命名事務
注釋:控制器注釋信息,非必填項
Script language(e.g.beanshell,javascirpt,jexl):腳本語言(可以從下面的下拉框中選擇對應的腳本語言JavaScript、beanshell等)
parameters to be passed to script(=> String Parameters and String []args):(傳遞給腳本的參數→可以理解為使用JSR223斷言腳本時候一起引用的參數 )
Script file(overrides script):重寫腳本(可以通過選擇腳本文件的狀態,是瀏覽調用已有的腳本還是在在下方的輸入框內寫入腳本;)
Script:下面的輸入框表示可以輸入變量類型,運用的腳本(取樣結果、斷言結果、取樣日志文件等參數)
3.5 Xpath 斷言
XPath即為XML路徑語言,它是一種用來確定XML(標准通用標記語言的子集)文檔中某部分位置的語言。XPath基於XML的樹狀結構,提供在數據結構樹中找尋節點的能力。
1、我們先來看看這個 Xpath斷言 長得是啥樣子,路徑:線程組 > 添加 > 斷言 > Xpath斷言,如下圖所示:
2、關鍵參數說明如下:
名稱:控制器的描述性名稱,顯示在左邊節點上,並用於命名事務
注釋:控制器注釋信息,非必填項
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.6 比較斷言
這是一種比較特殊的斷言元件,針對斷言進行字符串替換時使用;
作用對象:需要替換的字符串
1、我們先來看看這個 比較斷言 長得是啥樣子,路徑:線程組 > 添加 > 斷言 > 比較斷言,如下圖所示:
2、關鍵參數說明如下:
名稱:控制器的描述性名稱,顯示在左邊節點上,並用於命名事務
注釋:控制器注釋信息,非必填項
Select Comparison Operators:選擇比較運算符
Compare Content:可以選擇比較的內容類型(true/false或者自定義,編輯)
Compare Time:比較時間(可以設定比較的時間,單位為秒,默認為-1)
Comparison Fitters:比較修改工具
regular expression substitutions:替換正則表達式
Regex String:要替換的字符串(可從斷言結果中選擇)
substitutions:替換的字符串(替換結果)
3.7 斷言持續時間
斷言持續時間,用於判斷服務器的響應時間
1、我們先來看看這個 斷言持續時間 長得是啥樣子,路徑:線程組 > 添加 > 斷言 > 斷言持續時間,如下圖所示:
2、關鍵參數說明如下:
名稱:控制器的描述性名稱,顯示在左邊節點上,並用於命名事務
注釋:控制器注釋信息,非必填項
APPly to:適用范圍
Main sample and sub-samples:作用於父節點取樣器及對應子節點取樣器
Main sample only:僅作用於父節點取樣器
Sub-samples only:僅作用於子節點取樣器
Duration to assert:持續斷言
Duration in milliseconds:響應時間設置(單位:毫秒),如果響應時間大於設置的響應時間,則斷言失敗,否則成功!
4.小結
好了,今天到這里JMeter5的斷言上篇就介紹和分享完了,感謝您耐心的閱讀和一路支持宏哥!!!