学会了JsonPath,你的Python接口脚本才算完整

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

今天给大家推荐一款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的响应数据进行验证和处理。

相关推荐

  1. 学会JsonPathPython接口脚本完整

    2024-04-01 12:56:04       37 阅读
  2. 学会这10个Python脚本完成日常任务

    2024-04-01 12:56:04       35 阅读
  3. JsonPath

    2024-04-01 12:56:04       56 阅读
  4. fastapi搭建python项目,怎么能出来API接口文档

    2024-04-01 12:56:04       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-01 12:56:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-01 12:56:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-01 12:56:04       82 阅读
  4. Python语言-面向对象

    2024-04-01 12:56:04       91 阅读

热门阅读

  1. 32-4 APP渗透 - APP渗透与防御

    2024-04-01 12:56:04       36 阅读
  2. db2数据仓库集群的搭建

    2024-04-01 12:56:04       41 阅读
  3. webpack 与 vite的区别

    2024-04-01 12:56:04       36 阅读
  4. 【无标题】1135bfs好题

    2024-04-01 12:56:04       39 阅读
  5. python中yield是什么?

    2024-04-01 12:56:04       41 阅读
  6. C语言—指针数组

    2024-04-01 12:56:04       37 阅读
  7. win10开机自启动项目在哪关闭

    2024-04-01 12:56:04       35 阅读
  8. vue-列表渲染

    2024-04-01 12:56:04       44 阅读
  9. Kotlin it隐式变量的遮蔽问题

    2024-04-01 12:56:04       39 阅读