性能測試-JMeter斷言之JSON斷言


前面一節我們學習了JMeter斷言之響應斷言,今天我們來學習JMeter另一種斷言方法:JSON斷言。

JSON用於描述文本數據結構,有如下形式:
1.對象(object)
對象是一組無序的名稱/值對。對象以{(左大括號)開始,以}(右
大括號)結束。每個名稱后面跟着:冒號,
名稱/值對之間用逗號分隔。
比如:
{"name":"zhangsan","sex":1,"age":25}
2.數組(Array)
數組是值的有序集合。數組以[(左中括號)開始,以](右中括號)
結束。值之間用逗號分隔。
比如:
{
"man":[{"name":"zhangsan","sex":1,"age":21},
{"name":"lisi","sex":0,"age":18},
{"name":"wangwu","sex":0,"age":25}]
}
3.值(value)
值可以是字符串、數字、true/false、null、對象或數組。
4.字符串(string)
字符串是由零個或多個Unicode字符組成的序列,用雙引號括起來,
使用反斜杠轉義。
字符表示為單個字符串。字符串非常類似於C或Java中的字符串。
5.數字(number)
一系列0-9的數字組合,可以為負數或者小數。還可以用e或者E表示
為指數形式;

數字非常類似於C或Java數字,但只是不使用八進制和十六進制格式。
6.空白符(whitespace)
可以在任意成對的語法符號之間插入空白符(包括空格、換行符、回車符、橫向制表符)。

我們經常使用XPath來分析、轉換以及有選擇地從XML文檔中提取數據。與XPath類似,JOSNPath可以方便從JSON結構中發現和提取數據。

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

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

例如,

$.store.book[0].title or

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

JSONPath語法元素

 

 

 

 

 

 JSONPath實例:

  { "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

  }

  }

  }

 

 

 

 

 

 JSON 斷言:

JSON斷言可以對服務器返回的JSON文檔進行驗證。

JSON斷言有兩種使用模式:

1.根據JSONPath能否在JSON文檔中找到路徑;

2.根據JSONPath提取值並對值進行驗證。

若文檔格式為非JSON則斷言失敗;

若找不到路徑斷言失敗;

若提取值與預期值不一致斷言失敗。

配置項

Assert JSON Path exists:

用於斷言的JSON元素的路徑(JSONPath)。

1.Additionally assert value

是否額外驗證根據JSONPath提取的值。

不勾選,驗證JSONPath能否在JSON文檔中找到路徑;

勾選,驗證根據JSONPath提取值是否預期。

2.Match as regular expression

預期值是否可以使用正則表達式。

不勾選,預期值不能使用正則表達式表示;

勾選,預期值可以使用正則表達式表示。

Expected Value:

預期值

1.Expect null

若驗證提取的值為null,則勾選此項。

這里有兩個地方需要額外注意:

a.驗證null值,還是需要勾選“Additionally assert

value”,否則驗證的是JSONPath能否找到路徑;

b.預期值不填表示空字符,與null不等價。

2.Invert assertion(will fail if above conditions met)

若勾選,表示對斷言結果取反。

注意:

除了null外,還有一種特殊的值,就是空數組,預期值不能不填,需要

設置為:[]

應用案例

這里仍以前面介紹過的查詢被購買商品的總金額接口為例來講述JSON斷言的用法。

該接口返回的響應數據為JSON,故可以使用JSON斷言。

操作步驟:

1.對預期結果要驗證的項進行參數化這里驗證err_msg,result將預期結果寫入csv文件中

比如:

case_name,goods_id,goods_attr,goods_num,error_msg,rs lt

case1,9,226,3,,¥6630元

case2,,226,1,沒有找到指定的商品或者沒有找到指定的商品屬性。

case3,9,,1,,¥2298元

case4,9,226,,¥2308元

2.添加JSON Assertion並進行配置

JSON斷言每次只能斷言一個參數,因此這里需要添加多個JSON斷言。

假設對錯誤消息與商品金額這個兩個返回參數值做斷言。

{

"err_msg": "沒有找到指定的商品或者沒有找到指定的商品屬性。",

"result": "",

"qty": 1,

"err_no": 1

}

$.err_msg --> 沒有找到指定的商品或者沒有找到指定的商品屬性。

$.qty --> 1

JSON斷言配置

 

 

 


免責聲明!

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



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