🔥Jmeter(二十一) - 從入門到精通 - JMeter 斷言 - 上篇(詳解教程)
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 的斷言上篇就介紹和分享完了,感謝您耐心的閱讀和一路支援宏哥!!!
相關文章
- Jmeter(二十一) - 從入門到精通 - JMeter斷言 - 上篇(詳解教程)JMeter
- 🔥Jmeter(二十二) - 從入門到精通 - JMeter 斷言 - 下篇(詳解教程)JMeter
- 🔥Jmeter(十三) - 從入門到精通 - JMeter 定時器 - 上篇(詳解教程)JMeter定時器
- 🔥Jmeter(九) - 從入門到精通 - JMeter 邏輯控制器 - 上篇(詳解教程)JMeter
- 🔥Jmeter(八) - 從入門到精通 - JMeter 配置元件(詳解教程)JMeter元件
- Jmeter(二十二) - 從入門到精通 - JMeter斷言 - 下篇(詳解教程)JMeter
- Jmeter(十三) - 從入門到精通 - JMeter定時器 - 上篇(詳解教程)JMeter定時器
- Jmeter(十九) - 從入門到精通 - JMeter監聽器 -上篇(詳解教程)JMeter
- 🔥Jmeter(十四) - 從入門到精通 - JMeter 定時器 - 下篇(詳解教程)JMeter定時器
- Jmeter(二十三) - 從入門到精通 - JMeter函式 - 上篇(詳解教程)JMeter函式
- Jmeter(九) - 從入門到精通 - JMeter邏輯控制器 - 上篇(詳解教程)JMeter
- 🔥Jmeter(十五) - 從入門到精通 - JMeter 匯入自定義的 Jar 包(詳解教程)JMeterJAR
- 🔥Jmeter(十) - 從入門到精通 - JMeter 邏輯控制器 - 中篇(詳解教程)JMeter
- 🔥Jmeter(十一) - 從入門到精通 - JMeter 邏輯控制器 - 下篇(詳解教程)JMeter
- Jmeter(八) - 從入門到精通 - JMeter配置元件(詳解教程)JMeter元件
- Jmeter(二十) - 從入門到精通 - JMeter監聽器 -下篇(詳解教程)JMeter
- Jmeter(十四) - 從入門到精通 - JMeter定時器 - 下篇(詳解教程)JMeter定時器
- Jmeter(二十四) - 從入門到精通 - JMeter函式 - 中篇(詳解教程)JMeter函式
- 🔥Jmeter(六) - 從入門到精通 - 建立資料庫測試計劃(詳解教程)JMeter資料庫
- Jmeter(十) - 從入門到精通 - JMeter邏輯控制器 - 中篇(詳解教程)JMeter
- Jmeter(十一) - 從入門到精通 - JMeter邏輯控制器 - 下篇(詳解教程)JMeter
- Jmeter(十二) - 從入門到精通 - JMeter邏輯控制器 - 終篇(詳解教程)JMeter
- Jmeter(五十一) - 從入門到精通高階篇 - jmeter之運動戰(詳解教程)JMeter
- Jmeter(五十四) - 從入門到精通高階篇 - 如何在linux系統下執行jmeter指令碼 - 上篇(詳解教程)JMeterLinux指令碼
- Jmeter(二十七) - 從入門到精通 - Jmeter Http協議錄製指令碼(詳解教程)JMeterHTTP協議指令碼
- Jmeter(三十四) - 從入門到精通進階篇 - 引數化(詳解教程)JMeter
- Jmeter(四十八) - 從入門到精通高階篇 - Jmeter監控伺服器效能(詳解教程)JMeter伺服器
- Jmeter(三十) - 從入門到精通 - Jmeter Http協議錄製指令碼工具-Badboy3(詳解教程)JMeterHTTP協議指令碼
- 🔥Jmeter(七) - 從入門到精通 - 建立資料庫測試計劃實戰<MySQL 資料庫>(詳解教程)JMeter資料庫MySql
- Jmeter(四十三) - 從入門到精通高階篇 - Jmeter之IP偽裝和欺騙(詳解教程)JMeter
- Jmeter(三十三) - 從入門到精通 - Jmeter Http協議錄製指令碼工具-Badboy6(詳解教程)JMeterHTTP協議指令碼
- Jmeter(三十二) - 從入門到精通 - Jmeter Http協議錄製指令碼工具-Badboy5(詳解教程)JMeterHTTP協議指令碼
- Jmeter(二十六) - 從入門到精通 - 搭建開源論壇JForum(詳解教程)JMeter
- Jmeter(四十六) - 從入門到精通高階篇 - Jmeter之網頁圖片爬蟲-下篇(詳解教程)JMeter網頁爬蟲
- Jmeter(四十一) - 從入門到精通進階篇 - Jmeter配置檔案的刨根問底 - 下篇(詳解教程)JMeter
- Jmeter(五十二) - 從入門到精通高階篇 - jmeter之跨執行緒組傳遞引數(詳解教程)JMeter執行緒
- Jmeter(四十二) - 從入門到精通進階篇 - Jmeter配置檔案的刨根問底 -番外篇(詳解教程)JMeter
- Jmeter(四十九) - 從入門到精通高階篇 - jmeter使用監視器結果監控tomcat效能(詳解教程)JMeterTomcat