自动化测试数据校验神器!

1241 篇文章 6 订阅
1172 篇文章 2 订阅

 

在做接口自动化测试时,经常需要从接口响应返回体中提取指定数据进行断言校验。

今天给大家推荐一款json数据提取神器: jsonpath

jsonpath和常规的json有哪些区别呢?在Python中,json是用于处理JSON数据的内置模块,而jsonpath是用于从JSON数据中提取特定数据的查询语言和相关库。

它们的区别和适用场景:

json模块:

  • json模块是Python的内置模块,用于解析和生成JSON格式的数据。

  • 它提供了loads()和dumps()等方法,用于将JSON数据与Python数据结构之间进行转换。

jsonpath是一种用于从JSON对象中提取特定数据的查询语言,类似于XPath,但是针对JSON格式的数据而设计。

它提供了一种灵活的方式来定位和提取JSON对象中的数据,可以使用通配符、过滤器等功能进行精确的数据定位。

简单来说json模块适用于处理JSON数据的基本操作,而jsonpath适用于需要精确定位和提取JSON数据的复杂场景。

jsonpath用法

从上述可知,jsonpath是一种用于从JSON对象中提取特定数据的查询语言,类似于XPath,可以更精确地定位JSON对象中的数据。

常用的jsonpath操作符和通配符额:

  • $: 根对象

  • @: 当前对象

  • .: 子对象

  • ..: 递归地查找子对象

  • *: 通配符,匹配任何属性或数组元素

  • []: 过滤器,用于指定属性或数组元素的条件

下面是一个使用jsonpath提取JSON对象数据的示例:

import json
from jsonpath_ng import parse

# JSON对象
json_obj = {
    "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
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    }
}

# 使用jsonpath提取数据
jsonpath_expr = parse("$.store.book[1].author")
result = [match.value for match in jsonpath_expr.find(json_obj)]
print(result)  # 输出: ['Evelyn Waugh']

在上面的示例中,我们使用jsonpath_ng库解析了一个jsonpath表达式,并使用find()方法在JSON对象中查找匹配的数据。在这个例子中,我们使用$.store.book[1].author提取了第二本书的作者。

当在自动化测试中使用jsonpath时,可以通过jsonpath表达式来提取JSON响应中的特定数据,以便进行断言、验证和后续的处理。以下是一些常见的提取场景示例:

1、提取单个属性的值:

# 提取单个属性的值
jsonpath_expr = parse("$.store.book[0].title")
result = [match.value for match in jsonpath_expr.find(response.json())]
assert result[0] == "Sayings of the Century"

2、提取数组中的所有元素:

# 提取数组中的所有元素
jsonpath_expr = parse("$.store.book[*].author")
result = [match.value for match in jsonpath_expr.find(response.json())]
assert result == ["Nigel Rees", "Evelyn Waugh"]

3、提取满足条件的元素:

# 提取满足条件的元素
jsonpath_expr = parse("$.store.book[?(@.price < 10)].title")
result = [match.value for match in jsonpath_expr.find(response.json())]
assert result == ["Sayings of the Century"]

4、提取嵌套属性的值:

# 提取嵌套属性的值
jsonpath_expr = parse("$.store.bicycle.color")
result = [match.value for match in jsonpath_expr.find(response.json())]
assert result[0] == "red"

5、提取多个属性的值并进行组合:

# 提取多个属性的值并进行组合
jsonpath_expr = parse("$.store.book[0].['title', 'author']")
result = [match.value for match in jsonpath_expr.find(response.json())]
assert result[0] == {"title": "Sayings of the Century", "author": "Nigel Rees"}

在这些示例中,我们使用了jsonpath表达式从JSON响应中提取了不同的数据,包括单个属性的值、数组中的所有元素、满足条件的元素、嵌套属性的值以及多个属性的值并进行组合。这些提取场景可以帮助我们在自动化测试中对API的响应数据进行验证和处理。

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

软件测试面试文档

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值