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

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

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

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

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

     视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/343837.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

给定n个字符串s[1...n], 求有多少个数对(i, j), 满足i < j 且 s[i] + s[j] == s[j] + s[i]?

题目 思路&#xff1a; 对于字符串a&#xff0c;b, (a.size() < b.size()), 考虑对字符串b满足什么条件&#xff1a; 由1、3可知a是b的前后缀&#xff0c;由2知b有一个周期是3&#xff0c;即a.size()&#xff0c;所以b是用多个a拼接而成的&#xff0c;有因为a是b的前后缀&…

C++每日一练(15):简单幂计算

题目描述 输入两个数a和b&#xff0c;求a的b次方。 输入 输入两个整数a&#xff0c;b&#xff08;1<a<10&#xff0c;1<b<15&#xff09;。 输出 输出一个正整数&#xff0c;该值<1000000000000。 输入样例 3 3 输出样例 27 参考答案 #include<bits/stdc.h&…

87.乐理基础-记号篇-反复记号(一)反复、跳房子

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;86.乐理基础-记号篇-速度记号-CSDN博客 首先是反复记号表总结图&#xff1a; 当前是写前两个记号&#xff0c;其余记号后面写&#xff1a;这些反复记号最主要的目的很简单&#xff0c;还是为了节约纸张&#xff0c…

GPT Store,是否会成为下一个App Store?

经历了一场风波后&#xff0c;原本计划推出的GPT Store终于成功上线。OpenAI在北京时间1月11日推出了GPT Store&#xff0c;被广泛视为类似于苹果的"App Store"&#xff0c;为人工智能应用生态系统迈出了重要一步。然而&#xff0c;OpenAI要想将GPT Store打造成苹果般…

写在学习webkit过程的前面

webkit起源于KHTML&#xff0c;是KDE开源项目的KHTML和KJS引擎的一部分。在它的诞生和发展过程中&#xff0c;由两家著名的公司参与开发过程中&#xff0c;造成两次裂变。诞生两个内核webkit和blink&#xff0c;并发展和产生了两个主流的浏览器&#xff0c;分别为safari和chrom…

Nginx——基础配置

和大多数软件一样&#xff0c;Nginx也有自己的配置文件&#xff0c;但它又有很多与众不同的地方&#xff0c;本帖就来揭开Nginx基础配置的面纱。 1、Nginx指令和指令块 了解指令和指令块有助于大家了解配置的上下文&#xff0c;下面是一个配置模板示例&#xff1a; 在这个配…

搭建LNMP网站平台并部署Web应用

本章主要介绍&#xff1a; 安装Nginx安装MySQL安装PHP在LNMP平台中部署 Web 应用 构建LNMP网站平台就像构建LAMP平台一样&#xff0c;构建LNMP平台也需要Linux服务器&#xff0c;MySQL数据库&#xff0c;PHP解析环境&#xff0c;区别主要在Nginx 与 PHP的协作配置上&#xff0…

PHP在线考试平台管理系统源码带文字搭建教程和操作手册

PHP在线考试平台管理系统源码带文字搭建教程和操作手册 技术架构 PHP7.2 Thinkphp6 React UmiJs nginx mysql5.7 cnetos7以上 宝塔面板 系统功能特性与介绍 采用PHP7强类型&#xff08;严格模式&#xff09;。 题库管理 支持多种试题类型和录题方式。 考生管理 快速导入考…

RT-Thread入门笔记6-空闲线程及两个常用的钩子函数

空闲线程 空闲线程是一个比较特殊的系统线程&#xff0c;它具备最低的优先级。当系统中无其他就绪线程可运行时&#xff0c;调度器将调度到空闲线程。 空闲线程还负责一些系统资源回收以及将一些处于关闭态的线程从线程调度列表中移除的动作 空闲线程在形式上是一个无线循环结…

YOLOv5改进系列(25)——添加LSKNet注意力机制(大选择性卷积核的领域首次探索)

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制 YOLOv5改进系

Vue-13、Vue绑定css样式

1、绑定css样式字符串写法&#xff0c;适用于&#xff1a;样式的类名不确定 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>绑定css样式</title><!--引入vue--><script type"tex…

GLES学习笔记---立方体贴图(一张图)

一、首先看一张效果图 立方体贴图 二、纹理坐标划分 如上图是一张2D纹理&#xff0c;我们需要将这个2D纹理贴到立方体上&#xff0c;立方体有6个面&#xff0c;所以上面的2D图分成了6个面&#xff0c;共有14个纹理坐标 三、立方体 上边的立方体一共8个顶点坐标&#xff0c;范围…