川石教育
全国咨询热线:136-9172-9932
  1. 首页 > 资讯与干货 > IT资讯

JMeter断言之JSON断言

作者:川石学院 日期:2022-05-17 17:52:06 点击数:

  一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“JMeter断言之JSON断言”。

Jmeter:接口测试基础介绍(图1)

  若服务器返回的Response Body为JSON格式的数据,使用JSON断言来判断测试结果是较好的选择。

  首先需要根据JSON Path从返回的JSON数据中提取需要判断的实际结果,再设置预期结果,两者进行比较得出断言结果。

  下面首先介绍JSON与JSON Path相关的基础知识。

  一、JSON与JSONPath

  ▲ 什么是JSON

  •   JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式。

  •   JSON容易理解,便于阅读和编写;同时计算机也易于解析和生成,所以JSON有广泛的应用。

  JSON基于如下两种结构:

  1.名称/值对的集合

  在各种语言中,这可以作为对象(object)、记录(record)、结构(struct)、字典(dictionary)、哈希表(hash table)、键控列表(keyed list)或关联数组(associative array)来实现。

  2.值的有序列表

  在大多数语言中,这是以数组(array)、向量(vector)、列表(list)或序列(sequence)的形式实现的。

  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)

  可以在任意成对的语法符号之间插入空白符(包括空格、换行符、回车符、横向制表符)。

  ▲ 什么是JSONPath

  我们经常使用XPath来分析、转换以及有选择地从XML文档中提取数据。与XPath类似,JOSNPath可以方便从JSON结构中发现和提取数据。

  JSONPath中的“根成员对象”总是被称为$,无论它是对象还是数组。JSONPath表达式有“dot–notation”(.号)和“bracket–notation”([]号)两种不同的表示风格。

  例如,

  $.store.book[0].title or

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

  ▲ JSONPath语法元素

JMeter断言之JSON断言(图2)

  ▲ 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

  }

  }

  }

JMeter断言之JSON断言(图3)

  二、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,rslt

  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断言配置

  1. 断言错误消息:

JMeter断言之JSON断言(图4)

  2. 断言商品金额:

JMeter断言之JSON断言(图5)


相关文章
  • 亚马逊运营成功转行软件测试,薪资13K表示很满意!2022-05-17 17:52:06
  • 西安川石的兰朋友喊你来当他的学弟学妹啦!2022-05-17 17:52:06
  • 国外的月亮也不一定比国内测试猿的年薪美~2022-05-17 17:52:06
  • 建筑工程专业朱同学成功转行为软件测试人!2022-05-17 17:52:06
  • 财务管理专业转行软件测试月薪甩会计几条街!2022-05-17 17:52:06
  • 只有技术沉淀才能成功上岸,深圳就业薪资13K!2022-05-17 17:52:06
  • 薪资11K!实现自我价值,从掌握一门IT技术开始...2022-05-17 17:52:06
  • 文科生转行软件测试照样拿下高薪15K!2022-05-17 17:52:06
  • 恭喜罗同学喜提19.5K,成功入行软件测试!2022-05-17 17:52:06
  • 毕业1年,迷茫的他最终选择转行软件测试2022-05-17 17:52:06