『動善時』JMeter基礎 — 30、JMeter中JSON斷言詳解


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

若接口的返回的Response Body為JSON格式數據,使用JSON斷言組件來判斷測試結果是較好的選擇,判定也更靈活一些。

1、JSON斷言組件界面詳解

添加JSON斷言組件操作:選中“取樣器”右鍵 —> 添加 —> 斷言 —> JSON斷言

界面如下圖所示:

image

JSON斷言組件的詳細說明:

  • 名稱JSON斷言組件的自定義名稱,見名知意最好。
  • 注釋:即添加一些備注信息,對該JSON斷言組件的簡短說明,以便后期回顧時查看。
  • Assert JSON Path exists:填寫 JSONPath 表達式。
  • Additionally assert value:斷言值,也就是否額外驗證根據JSONPath表達式提取的值。
    如果不勾選,則驗證JSONPath表達式在JSON文檔中找到路徑。
    如果勾選,則驗證根據JSONPath表達式提取的值,是否與預期值一樣。(勾選)
  • Match as regular expression:預期值是否可以使用正則表達式。
    如果不勾選,則預期值不能使用正則表達式表示。
    如果勾選,則預期值可以使用正則表達式表示。
  • Expected Value:填寫預期值。
  • Expect null:預期值為NULL。
    若驗證提取的值為NULL,則勾選此項。
    注意:
    1)如驗證NULL值,還是需要勾選Additionally assert value選項,否則驗證的是JSONPath表達式能否找到路徑。
    2)預期值不填表示空字符,與NULL不等價。
  • Invert assertion (will fail if above conditions met):若勾選,表示對斷言結果取反。

注意:預期值除了NULL外,還有一種特殊的值,就是空數組。這時預期值不能不填,需要設置為[],表示空數組。

2、JSON斷言組件的使用

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

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

添加元件操作步驟

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

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

image

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

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

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

編寫內容如下:

image

(3)JSON斷言界面內容

我們需要根據JSON Path,從返回的JSON數據中提取需要判斷的實際結果。再設置預期結果,兩者進行比較得出斷言結果。

  • JSON斷言界面中我們要編寫JSONPath表達式,來從響應體數據中找到需要的數據。
  • 然后要勾選Additionally assert value選項。
  • 最后在Expected Value填寫預期值。

以上是通用步驟,編寫好的JSON斷言如下圖所示:

image

說明JSON斷言的模式

JSON斷言可以對服務器返回的JSON文檔進行驗證,JSON斷言有兩種使用模式:

  1. 根據JSONPath表達式,能否在JSON文檔中找到路徑。也就是只關注路徑存不存在,不管值找的對不對。
  2. 根據JSONPath表達式提取值,並對值進行驗證。

JSON斷言的判斷方式

  • 若文檔格式為非JSON,則斷言失敗。(重點)
  • 若找不到JSONPath路徑,則斷言失敗。(重點)
  • 若JSONPath表達式找到提取值,且沒有設置預期值,則斷言通過。
  • 若JSONPath表達式找到提取值,且與預期值不一致,則斷言失敗。(重點)
  • 若JSONPath表達式找到提取值,且與預期值一致,則斷言通過。
  • 若JSONPath表達式找到提取值是一個數組,迭代判斷是否有提取值與預期值匹配,有則通過,沒有則失敗。

(4)查看運行結果

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

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

image

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

image

(5)斷言結果組件說明

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

如下圖所示:

image

說明:

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

3、JSON與JSON Path的簡單說明

(1)JSON

JSON(JavaScript Object Notation)是一種輕量級的數據交換格式。

JSON數據容易理解,便於閱讀和編寫,同時計算機也易於解析和生成,所以JSON有廣泛的應用。

JSON常用數據結構:

  • 對象(object)格式

    {
        "name": "zhangsan", 
        "sex": 1, 
        "age": 25
    }
    
  • 數組(Array)格式

    {
        "man": [
            {
                "name": "zhangsan", 
                "sex": 1, 
                "age": 21
            }, 
            {
                "name": "lisi", 
                "sex": 1, 
                "age": 18
            }
        ], 
        "weman": [
            {
                "name": "wangwu", 
                "sex": 0, 
                "age": 25
            }, 
            {
                "name": "zhaoliu", 
                "sex": 0, 
                "age": 28
            }
        ]
    }
    

(2)JSONPath

我們經常使用XPath來分析、轉換以及有選擇地從XML文檔中提取數據。

與XPath類似,JOSNPath可以方便的從JSON結構中發現和提取數據。

JSONPath中的“根成員對象”總是被稱為$,無論它是對象還是數組。

JSONPath表達式有dot–notation.號)和bracket–notation[]號)兩種不同的表示風格。

例如:

  • $.store.book[0].title
  • $['store']['book'][0]['title']

(3)JSONPath語法

JSONPath語法如下表:

image

JSON數據如下:

{ "store": {
    "book": [ 
      { "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      { "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      },
      { "category": "fiction",
        "author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": 8.99
      },
      { "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}

具體示例如下表:

image

參考:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM