推荐一款接口自动化测试数据提取神器 JSonPath

在之前分享中,给大家介绍过一篇:如何快速审核接口返回值全部字段解决方案,详见原文:接口自动化测试,一键快速校验接口返回值全部字段 。当时,提到解决这类问题,市面上常见的解决方案有两种:
- 根据业务校验需求,自定义开发校验规则库
- 借助现有的第三方库
而文章中介绍到的方案,就是借助现有的第三方库来实现:DeepDiff 。对于一些特殊业务或者复杂的测试场景来说,这类通用方案,总会有一些需求无法满足。因此往往还需要根据这类业务校验需求,自定义开发校验规则库。
我们今天不讲如何开发一款自定义开发校验规则库,而是给大家分享一款在开发自定义校验规则库或者常规的接口自动化测试时,经常会用到的一款数据提取神器:JSonPath。
1. JSonPath介绍
JSonPath是一种简单的方法来提取给定JSON文档的部分内容。 JSonPath有许多编程语言,如Javascript,Python和PHP,Java等。
JSonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的JSON内容。
项目地址:
https://github.com/json-path/JsonPath
一句话概括:JsonPath就是用来解析提取Json数据用的。
2. JSonPath语法
JSONPath 是参照,Xpath表达式来解析XML文档的方式,JSON数据结构通常是匿名的并且不一定需要有根元素。JSONPaht 用一个抽象的名字$来表示最外层对象,即$ 代表整个JSON数据的值。
JSonpath的语法如下:jsonpath.jsonpath()
参数:json对象,jsonpath表达式
返回值:列表
JSONPath 表达式可以使用. 符号如下:
$.store.book[0].title
或者使用[] 符号
$['store']['book'][0]['title']
JSONPath 允许使用通配符 * 表示所以的子元素名和数组索引,还允许使用 '..' 。
表达式在下面的脚本语言中可以使用显示的名称或者索引:
$.store.book[(@.length-1)].title
使用'@'符号表示当前的对象,?(<判断表达式>) 使用逻辑表达式来过滤。
$.store.book[?(@.price > 100)].title
其中XPath和JSONPath语法区别如下:

需要额外注意的是:
- []在xpath表达式总是从前面的路径来操作数组,索引是从1开始。
- 使用JOSNPath的[]操作符操作一个对象或者数组,索引是从0开始。
3. JsonPath实战使用
安装:
pip install jsonpath
例如:待提取的json数据变量名为: json_datas。
json_datas = {"store": {
"book": [
{ "category": "测试开发技术",
"author": "狂师",
"title": "公众号:测试开发技术",
"price": 129
},
{ "category": "自动化测试",
"author": "狂师1",
"title": "《自动化测试实战宝典》",
"price": 109
},
{ "category": "Python",
"author": "狂师2",
"title": "Python实战教程",
"isbn": "0-110-234567-30",
"price": 99
},
{ "category": "Java",
"author": "狂师3",
"title": "小白学Java",
"isbn": "0-13095-19295-8",
"price": 89
}
],
"info": {
"color": "red",
"price": 88
}
}
}
1. 查找book下面所有的author
import jsonpath
datas = jsonpath.jsonpath(json_datas, '$.store.book[*].author')
print(datas)
输出结果为:['狂师', '狂师1', '狂师2', '狂师3']
上述提取表达式,可以改为如下:
datas = jsonpath.jsonpath(json_datas, '$..author')
print(datas)
具备同等效果,输出所有author,结果同样为:['狂师', '狂师1', '狂师2', '狂师3']
2. 查找store下面book所有节点数据
datas = jsonpath.jsonpath(json_datas, '$.store.book.*')
print(datas)
输出结果为:
[{'category': '测试开发技术', 'author': '狂师', 'title': '公众号:测试开发技术', 'price': 129}, {'category': '自动化测试', 'author': '狂师1', 'title': '《自动化测试实战宝典》', 'price': 109}, {'category': 'Python', 'author': '狂师2', 'title': 'Python实战教程', 'isbn': '0-110-234567-30', 'price': 99}, {'category': 'Java', 'author': '狂师3', 'title': '小白学Java', 'isbn': '0-13095-19295-8', 'price': 89}]
3. 查找book下面第三个book
datas = jsonpath.jsonpath(json_datas, '$.store.book[2]')
print(datas)
输出结果为:
[{'category': 'Python', 'author': '狂师2', 'title': 'Python实战教程', 'isbn': '0-110-234567-30', 'price': 99}]
4. 查找book下面最后个book,返回的是一个列表
datas = jsonpath.jsonpath(json_datas, '$.store.book[(@.length-1)]')
print(datas)
输出结果:
[{'category': 'Java', 'author': '狂师3', 'title': '小白学Java', 'isbn': '0-13095-19295-8', 'price': 89}]
5.查找 book下面前3本书
datas = jsonpath.jsonpath(json_datas, '$.store.book[0,2]')
print(datas)
输出结果为:
[{'category': '测试开发技术', 'author': '狂师', 'title': '公众号:测试开发技术', 'price': 129}, {'category': 'Python', 'author': '狂师2', 'title': 'Python实战教程', 'isbn': '0-110-234567-30', 'price': 99}]
6. 查找所有的包含isbn这个键的所有book
datas = jsonpath.jsonpath(json_datas, '$.store.book[?(@.isbn)]')
print(datas)
输出结果为:
[{'category': 'Python', 'author': '狂师2', 'title': 'Python实战教程', 'isbn': '0-110-234567-30', 'price': 99}, {'category': 'Java', 'author': '狂师3', 'title': '小白学Java', 'isbn': '0-13095-19295-8', 'price': 89}]
7. 查找价格大于100的所有书
datas = jsonpath.jsonpath(json_datas, '$.store.book[?(@.price>100)]')
print(datas)
输出结果:
[{'category': '测试开发技术', 'author': '狂师', 'title': '公众号:测试开发技术', 'price': 129}, {'category': '自动化测试', 'author': '狂师1', 'title': '《自动化测试实战宝典》', 'price': 109}]
4. 最后,JsonPath小技巧
最后再给大家推荐一个技巧,如果一开始对JSONPath表达式不太熟悉,可以将需要提取的JSON数据,通过jsonpath在线解析工具测试一下,在线解析JSONPath网址很多,例如:
http://www.e123456.com/aaaphp/online/jsonpath/

在接口自动化测试中,只有你懂得利用好JSONPath,那么至少可以让你在自动化测试数据提取这块,随心所欲的提取自己要想的数据。
好了,今天的干货分享就到这了,你学会了吗?
推荐一款接口自动化测试数据提取神器 JSonPath的更多相关文章
- python接口自动化--json解析神器jsonpath
前言 做接口测试的时候,大部分情况下返回的是json数据,我们需要对返回的json断言. 当返回的数据量比较大,并且嵌套的层级很深的时候,很多小伙伴不会取值,往往在返回结果取值上浪费很多时间.一直在寻 ...
- 推荐一款接口 API 设计神器!
今天栈长给大家推荐一款接口 API 设计神器,传说中的,牛逼哄洪的 Swagger,它到底是什么?今天为大家揭开谜底! Swagger是什么? 官网:https://swagger.io/ Swagg ...
- 推荐三款 Mac 上的理财神器 iCompta、Rublik、UctoX
今天推荐三款理财神器,像个人的话可以使用 iCompta(个人财务管理)一款软件就好了,但有些朋友可能有关注汇率的需求,可以使用 Rublik(汇率动态),还有一些小伙伴可能有自己的公司等原因财务量较 ...
- 推荐一款接口文档在线管理系统-MinDoc
项目简介 MinDoc 是一款针对IT团队开发的简单好用的文档管理系统. MinDoc 的前身是 SmartWiki 文档系统.SmartWiki 是基于 PHP 框架 laravel 开发的一款文档 ...
- 接口自动化之提取响应结果(raw、json)
做接口测试时,我们一般会取得响应结果的部分值,来与预期结果对比,做断言 目录 1.响应结果类型 2.json响应结果的提取 3.raw响应结果的提取 1.响应结果类型 通过fiddler的respon ...
- 新特性,推荐一款超强接口管理神器 Apifox
去年,在公众号给大家推荐了一款新面市不久的接口测试神器:Apifox,如果还未了解的读者,感兴趣的话可查阅原文:推荐一款技术人必备的接口测试神器:Apifox 为了照顾新进来的读者,且最近一年,Api ...
- 低代码开发,推荐一款Web 端自动化神器:Automa
1. Automa介绍 又到了优秀工具推荐的时候了,今天给大家分享一款前端自动化操作神器: Automa . 首先了解一下Automa是什么? Automa它定位是一款 Chrome 插件,也就意味着 ...
- 接口自动化框架两大神器-正则提取器和Jsonpath提取器
一 接口自动化框架 一 框架结构 二 结构说明 - API 用于封装被测系统的接口(用request模块封装的请求方法) - TestCase 将一个或多个接口封装成测试用例,并使用UnitTest管 ...
- 推荐一款 MyBatis 开发神器,为简化而生!
Java技术栈 )); MyBatis-Plus将会生成以下查询SQL: SELECT * FROM user WHERE age >= 18FROM user WHERE age >= ...
- 推荐一款技术人必备的接口测试神器:Apifox
1. 背景 作为互联网行业技术从业者,接口调试是必不可少的一项技能,通常我们都会选择使用 Postman 这类工具来进行接口调试,在接口调试方面 Postman 做的确实非常出色.当然除了Postma ...
随机推荐
- LeetCode 第 193 场周赛 解题报告
5436. 一维数组的动态和 时间复杂度:O(n) 知识点:前缀和 根据题目给出的公式 runningSum[i] = sum(nums[0]-nums[i]),可得: 当 i > 0 时,ru ...
- 版本升级 | v1.0.13发布,传下去:更好用了
新发行版来啦~ 本次更新主要聚焦兼容性的提升及结果报告格式的增加,另外对部分解析逻辑及使用体验进行了优化.在这里特别鸣谢大佬@Hugo-X在社区仓库提交的PR~ 后续,OpenSCA项目组会继续致力于 ...
- freeswitch两个DTMF转换接口的区别
概述 freeswitch支持三种模式的DTMF传输方式,分别时inband.INFO.2833. 在传统的PSTN网络中,所有的DTMF码都是inband模式,所以VOIP网络和PSTN网络对接中, ...
- freeswitch自带yum源配置方式
概述 在开发过程中,我们使用freeswitch源代码编译安装的方式比较多,这种方式适合对fs比较了解,有一定基础的研发人员. 但是,对于希望快速上手使用fs普通功能的人员来说,源代码编译的方式就过于 ...
- Python数据可视化-地图可视化
Python数据可视化-地图可视化 一.基础地图使用 基础地图演示 二.疫情地图-国内疫情地图 具体代码如下 """ 演示全国疫情可视化地图开发 "" ...
- GoLang 高性能编程之字符串拼接
看代码突然想到一个问题:字符串在内存中是怎么表示的?花了大半天才理清,这里记录梳理下. 1. 字符 提到字符串需要先了解字符,没有字符哪能串起来呢.不像 int,float 这种直接在内存中以位数表示 ...
- Linux复制安装 jdk 环境
转载请注明出处: 最近在弄服务器环境,发现可以通过复制已安装 jdk 的服务器配置到新的服务器,并配置服务器环境变量配置文件就可以完成. 操作步骤如下: 1. 查看以安装jdk服务器的环境配置,并复制 ...
- 基于java+springboot的商城网站、电子商城管理系统
该系统是基于java+springboot+vue开发的在线商城网站.是给师弟开发的课程作业.学习过程中,遇到问题可以咨询作者. 演示地址 前台地址: http://shop.gitapp.cn 后台 ...
- 05-逻辑仿真工具VCS-执行过程
Verilog Simulation Event Queue 主要了解VCS是如何处理交给它的代码的 Verilog的仿真事件队列,介绍VCS如何处理交给它的代码.VCS是Synopsys公司的,支持 ...
- 07 - HTTP
HTTP 强烈推荐学习:HTTP | MDN 一 .基础概念 请求和响应报文 客户端发送一个请求报文给服务器,服务器根据请求报文中的信息进行处理,并将处理结果放入响应报文中返回给客户端. 请求报文结构 ...