暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

JMeter:断言之JSON断言

西安川石 2022-04-29
391





JSON Assertion


若服务器返回的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语法元素




        ▲ 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,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. 断言错误消息:



            2. 断言商品金额:





            以上就是今天的所有内容,每个工作日小编都会更新一个有关测试的小知识,希望大家多多关注我们,一起来学习喔!


            温馨提示:添加老师微信【13691729932】可以获取全套软件测试自学资料!



             往期回顾 


            JMeter:断言之响应断言



            大神邀你加入

            软件测试群

            免费软件测试课

            川石课堂



            文章转载自西安川石,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论