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的斷言上篇就介紹和分享完了,感謝您耐心的閱讀和一路支援巨集哥!!!