• JMeter断言之JSON断言


    JSON断言

    若服务器返回的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)

    数组是值的有序集合。数组以[(左中括号)开始,以](右中括号)结束。值之间用逗号分隔。

    比如:

    1. {
    2. "man":[{"name":"zhangsan","sex":1,"age":21},
    3. {"name":"lisi","sex":0,"age":18},
    4. {"name":"wangwu","sex":0,"age":25}]
    5. }

    3.值(value)

    值可以是字符串、数字、true/false、null、对象或数组。

    4.字符串(string)

    字符串是由零个或多个Unicode字符组成的序列,用双引号括起来,使用反斜杠转义。

    字符表示为单个字符串。字符串非常类似于C或Java中的字符串。

    5.数字(number)

    一系列0-9的数字组合,可以为负数或者小数。还可以用e或者E表示为指数形式;数字非常类似于C或Java数字,但只是不使用八进制和十六进制格式。

    6.空白符(whitespace)

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

    1. 现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
    2. 如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
    3. 可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
    4. 分享他们的经验,还会分享很多直播讲座和技术沙龙
    5. 可以免费学习!划重点!开源的!!!
    6. qq群号:110685036

    ▲ 什么是JSONPath

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

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

    例如,

    1. $.store.book[0].title or
    2. $['store']['book'][0]['title']

    ▲ JSONPath语法元素

    ▲ JSONPath实例

    1. { "store": {
    2. "book": [
    3. { "category": "reference",
    4. "author": "Nigel Rees",
    5. "title": "Sayings of the Century",
    6. "price": 8.95
    7. },
    8. { "category": "fiction",
    9. "author": "Evelyn Waugh",
    10. "title": "Sword of Honour",
    11. "price": 12.99
    12. },
    13. { "category": "fiction",
    14. "author": "Herman Melville",
    15. "title": "Moby Dick",
    16. "isbn": "0-553-21311-3",
    17. "price": 8.99
    18. },
    19. { "category": "fiction",
    20. "author": "J. R. R. Tolkien",
    21. "title": "The Lord of the Rings",
    22. "isbn": "0-395-19395-8",
    23. "price": 22.99
    24. }
    25. ],
    26. "bicycle": {
    27. "color": "red",
    28. "price": 19.95
    29. }
    30. }
    31. }

    二、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断言。

    假设对错误消息与商品金额这个两个返回参数值做断言。

    1. {
    2. "err_msg": "没有找到指定的商品或者没有找到指定的商品属性。",
    3. "result": "",
    4. "qty": 1,
    5. "err_no": 1
    6. }
    7. $.err_msg --> 没有找到指定的商品或者没有找到指定的商品属性。
    8. $.qty --> 1

    ▲ JSON断言配置

    1. 断言错误消息

    2. 断言商品金额:

    最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

    软件测试面试文档

    我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
     

    在这里插入图片描述

  • 相关阅读:
    c语言基础(转义字符、printf()、scanf()详解、文件使用方法)
    数字图像处理笔记
    hive中 count结果和spark sql中count结果不一致
    高性能 数据库连接池 HikariCP | HikariCP 配置详解
    uni-app基于vite和vue3创建并集成pinia实现数据持久化
    大咖说·对话生态|当Confluent遇见云:实时流动的数据更有价值
    Mac中IntelliJ IDEA每次打开立刻“意外退出”的解决方法
    [NLP Begin] Classical NLP Methods - HMM
    百度在中国数字人类市场AI能力排名第一?IDC再三证实,你觉得呢
    我也是醉了,Eureka 延迟注册还有这个坑!
  • 原文地址:https://blog.csdn.net/m0_58026506/article/details/132996428