『動善時』JMeter基礎 — 29、JMeter響應斷言詳解

1、JMeter斷言介紹

JMeter中有個元件叫做斷言(Assertion),它的作用和LoadRunner中的檢查點類似。用於檢查測試中得到的響應數據是否符合預期,用以保證性能測試過程中的數據交互與預期一致。

使用斷言的原理:在Request請求的返回層面增加一層判斷機制。因為Request請求成功了,並不代表結果一定正確。所以通過斷言,我們不再會被200狀態碼所迷惑,而是可以通過斷言,看到我們請求是否真正的成功!

解釋:狀態碼200僅表示,請求成功發送,服務器成功接收和處理,並返回處理後的結果的狀態。並不能確定返回給客戶端數據,是我們需要的數據。

2、響應斷言組件界面詳解

添加響應斷言組件操作:選中「取樣器」右鍵 —> 添加 —> 斷言 —> 響應斷言

界面如下圖所示:

image

響應斷言組件的詳細說明:

  • 名稱響應斷言組件的自定義名稱,見名知意最好。
  • 注釋:即添加一些備註信息,對該響應斷言組件的簡短說明,以便後期回顧時查看。

(1)Apply to:響應斷言的應用範圍

  • Main sample and sub-samples:作用於父節點的取樣器及對應子節點的取樣器。
  • Main sample only:僅作用於父節點的取樣器。(選默認的 main sample only 就行了)
  • Sub-samples only:僅作用於子節點的取樣器。
  • JMeter Variable Name to use:作用於JMeter變量(輸入框內可寫入正則提取的響應值),從指定變量中提取需要的值。

(2)測試字段

  • 響應文本:請求的響應文本信息,不包含響應頭信息,最常用的斷言字段。
  • 響應代碼:HTTP請求返回的響應碼。
  • 響應信息:響應信息中匹配數據(Response message)。
  • Response Headers:從響應頭信息中提取數據。
  • Request Headers:從請求頭信息中提取數據。
  • URL樣本:從請求URL中提取數據,如果有重定向包含重定向URL。
  • Document (text):文檔(文本),通過Apache Tika從各種類型的文檔中,提取文本進行驗證,包括響應文本,pdf、word等等各種格式文本。
  • 忽略狀態(Ignore Status): 一個請求進行多項響應斷言時,忽略某一項斷言的響應結果,而繼續下一項斷言。
  • Request Data:從請求體包含的信息中提取數據。

(3)模式匹配規則

  • 包括:響應的結果中,包含指定的文本或者字段值,則為True,支持正則表達式。
  • 匹配:完全匹配,期望值與實際結果必須完全一致,則為True,一般結合正則表達式使用。
  • 相等(Equals):響應結果與指定的內容完全一致,則為True,不支持正則表達式。
  • 子字符串(Substring):返回結果包含指定的字符串,不需完全匹配,但大小寫敏感,則為True,不支持正則表達式。
  • 否:不包含或匹配給定文本,則為True。

(4)測試模式

  • 在測試模式輸入框中,輸入我們給定的匹配內容,之後響應斷言組件會獲取請求中響應的數據與之匹配。
    1)點擊添加按鈕進行編輯數據。
    2)從剪貼板添加,就是粘貼已複製的內容到輸入框中。
    3)刪除按鈕,刪除輸入框中的全部內容。
  • Custom failure message:在輸入框中,可以自定義斷言失敗所顯示的消息內容。

提示:響應斷言可添加多個,但是多個斷言之間是與的關係,不能滿足或的需求。

3、響應斷言組件的使用

我們以一個登陸接口,來演示響應斷言組件的應用。

(1)測試計劃內包含的元件

添加元件操作步驟

  1. 創建測試計劃。
  2. 創建線程組:選中「測試計劃」右鍵 —> 添加 —> 線程(用戶) —> 線程組
  3. 在線程組裏面,添加取樣器「HTTP請求」組件:選中「線程組」右鍵 —> 添加 —> 取樣器 —> HTTP請求
  4. 在取樣器下,添加斷言「響應斷言」組件:選中「取樣器」右鍵 —> 添加 —> 斷言 —> 響應斷言
  5. 在取樣器下,添加監聽器「斷言結果」組件:選中「取樣器」右鍵 —> 添加 —> 監聽器 —> 斷言結果
  6. 在線程組裏面,添加監聽器「察看結果樹」組件:查看結果,選中「線程組」右鍵 —> 添加 —> 監聽器 —> 察看結果樹

最終測試計劃中的元件如下:

image

點擊運行按鈕,會提示你先保存該腳本,腳本保存完成後會直接自動運行該腳本。

(2)登陸接口請求界面內容

標準的Post請求,填寫請求的基本信息和參數即可。

編寫內容如下:

image

(3)響應斷言界面內容

可根據要測試響應字段,和模式匹配規則來設置斷言。

比如下方截圖是匹配,返回結果中的狀態碼是否是200,如果是則表示斷言成功,否則失敗。

image

(4)查看運行結果

我們在察看結果樹組件中,觀察腳本運行之後的結果。

如果斷言正確,和正常發送請求一樣,如下圖:

image

如果斷言失敗,則會出現斷言失敗的提示,如下圖所示:

image

(5)斷言結果組件說明

也添加斷言結果監聽器,通過斷言結果組件來判斷斷言是否通過。

如下圖所示:

image

說明:

  • 已通過的斷言僅顯示取樣器名稱。
  • 未通過的,除了顯示取樣器的名稱,還顯示錯誤原因。

4、總結

響應斷言組件常用於斷言三個方面:

  1. 斷言HTTP請求的響應狀態碼。如上面的練習。
  2. 斷言響應信息中的業務狀態碼。如下示例:
    響應結果:{"status":1,"code":"10001","data":null,"msg":"登錄成功"}
    匹配業務狀態碼界面:
    image
  3. 斷言接口請求後服務端響應的數據。(和上面基本一樣)

5、補充兩個類似的斷言組件

(1)大小斷言組件

根據返回內容的大小(數據多少)進行斷言,作用於返回的響應報文。

添加大小斷言Size Assertion)組件操作:選中「取樣器」右鍵 —> 添加 —> 斷言 —> 大小斷言

界面如下圖所示:

image

說明:

1)Apply to:響應斷言的應用範圍

響應斷言組件。

2)Response Size Field to Test:要斷言哪部分內容的位元組大小。

  1. Full response:響應全部內容的位元組大小。
  2. Response Headers:響應頭內容的位元組大小。
  3. Response Body:響應體內容的位元組大小。
  4. 響應代碼:響應碼位元組大小。
  5. 響應信息:Response message部分信息位元組大小。

3)Size to Assert:設置斷言位元組大小的範圍

自己輸入位元組數,然後選擇範圍:=、!=、>、<、>=、<=

(2)持續時間斷言組件

用於判斷服務器的響應時間是否符合要求。

該斷言計算的時間為,從發送請求到收到響應的這段時間,是否在我們設置的時間之內。

如果該時間小於設置時間,則成功;如果大於設置時間,則失敗。

添加持續時間斷言組件操作:選中「取樣器」右鍵 —> 添加 —> 斷言 —> 持續時間斷言

界面如下圖所示:

image

說明:

1)Apply to:響應斷言的應用範圍

響應斷言組件。

2)斷言持續時間:設置請求返迴響應的最長時間,單位毫秒。

說明:這兩個斷言的用法和響應斷言的用法一樣,這裡就不做演示了。