当前位置 博文首页 > 繁华似锦Fighting:『动善时』JMeter基础 — 30、JMeter中JSON断

    繁华似锦Fighting:『动善时』JMeter基础 — 30、JMeter中JSON断

    作者:繁华似锦Fighting 时间:2021-06-01 18:23

    目录
    • 1、JSON断言组件界面详解
    • 2、JSON断言组件的使用
      • (1)测试计划内包含的元件
      • (2)登陆接口请求界面内容
      • (3)JSON断言界面内容
      • (4)查看运行结果
      • (5)断言结果组件说明
    • 3、JSON与JSON Path的简单说明
      • (1)JSON
      • (2)JSONPath
      • (3)JSONPath语法

    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

    参考:

    • https://zhuanlan.zhihu.com/p/72918260?from=singlemessage
    • https://blog.csdn.net/weixin_45674822/article/details/107434993
    bk
    下一篇:没有了