学会这个Python库,接口测试so easy!
off999 2024-12-09 16:20 12 浏览 0 评论
摘要:我们在做接口测试时,大多数返回的都是json属性,我们需要通过接口返回的json提取出来对应的值,然后进行做断言或者提取想要的值供下一个接口进行使用。
但是如果返回的json数据嵌套了很多层,通过查找需要的词,就很不方便,小编今天介绍一种python的第3方库jsonpath。
jsonpath
jsonpath是使用一种简单的方法来提取给定JSON内容。在我们做接口测试时,目前流行的数据格式就是JSON格式的,当碰到复杂JSON格式时,我们可以使用JsonPath快速提取数据或者更新数据。
安装:pip install jsonpath。
小编先通过正常的接口,获取一段json数据供我们进行测试使用:
import requests
#请求天气的url地址
url='http://apis.juhe.cn/simpleWeather/query'
#请求参数
data={
"city":"上海",
"key":"331eab8f3481f37868378fcdc76cb7cd"
}
#发送post请求
r=requests.post(url,data=data)
j=r.json()
print(j)
通过执行后,获取一段我们想要的json数据。
{
"reason":"查询成功!",
"result":{
"city":"上海",
"realtime":{
"temperature":"23",
"humidity":"25",
"info":"多云",
"wid":"01",
"direct":"西北风",
"power":"2级",
"aqi":"58"
},
"future":[
{
"date":"2023-03-15",
"temperature":"10/23℃",
"weather":"多云",
"wid":{
"day":"01",
"night":"01"
},
"direct":"西南风转东北风"
},
{
"date":"2023-03-16",
"temperature":"9/15℃",
"weather":"多云转小雨",
"wid":{
"day":"01",
"night":"07"
},
"direct":"东南风"
},
{
"date":"2023-03-17",
"temperature":"9/13℃",
"weather":"中雨转小雨",
"wid":{
"day":"08",
"night":"07"
},
"direct":"东南风转北风"
},
{
"date":"2023-03-18",
"temperature":"8/15℃",
"weather":"多云",
"wid":{
"day":"01",
"night":"01"
},
"direct":"北风转东南风"
},
{
"date":"2023-03-19",
"temperature":"12/16℃",
"weather":"晴",
"wid":{
"day":"00",
"night":"00"
},
"direct":"东南风"
}
]
},
"error_code":0
}
通过下标提取
json数据有了,那么我们先用正常提取json的方法,进行提取3-16日的天气信息,看看如何提取。
data=result['result']['future'][1]
print(data)
------------------------------输出结果---------------------------
{'date':'2023-03-16','temperature':'9/15℃','weather':'多云转小雨','wid':{'day':'01','night':'07'},'direct':'东南风'}
可以看到我们想要提取需要找到对应的值,然后在继续往下一层一层的查找,如果嵌套层数过多,容易出错,返回信息格式发生改变,这里需要修改信息。
通过jsonpath提取
同样的json数据,我们通过jsonpath进行提取:
data=jsonpath.jsonpath(result,'$..[?(@.date=="2023-03-16")]')
print(data)
-----------------------------输出结果----------------------------
[{'date':'2023-03-16','temperature':'9/15℃','weather':'多云转小雨','wid':{'day':'01','night':'07'},'direct':'东南风'}]
通过上面的内容会发现,我们直接通过过滤器的方式来讲我们的数据取出来了。有点类似我们的正则表达式。
jsonpath的其他用法
上面介绍的只是jsonpath的一个用法,下面小编介绍几种jsonpath的其他用法。
通过$获取属性值内容
#直接获取到future的内容
data=jsonpath.jsonpath(result,'$.result.future')
data1=jsonpath.jsonpath(result,'$.reason')
print(data)
print(data1)
-----------------------------输出结果----------------------
[[{'date':'2023-03-15','temperature':'10/23℃','weather':'多云','wid':
{'day':'01','night':'01'},'direct':'西南风转东北风'},{'date':'2023-03-16','temperature':'9/15℃','weather':'多云转小雨','wid':{'day':'01','night':'07'},'direct':'东南风'},
{'date':'2023-03-17','temperature':'9/13℃','weather':'中雨转小雨','wid':{'day':'08','night':'07'},'direct':'东南风转北风'},{'date':'2023-03-18','temperature':'8/15℃','weather':'多云','wid':{'day':'01','night':'01'},'direct':'北风转东南风'},{'date':'2023-03-19','temperature':'12/16℃','weather':'晴','wid':{'day':'00','night':'00'},'direct':'东南风'}]]
['查询成功!']
通过【*】获取对应值
通过上面的json值,获取到关于date的时间值。
data=jsonpath.jsonpath(result,'$.result.future.[*].date')
print(data)
-----------------------------输出结果----------------------
['2023-03-15','2023-03-16','2023-03-17','2023-03-18','2023-03-19']
通过切片获取对应值
data=jsonpath.jsonpath(result,'$..future[0,1]')
print(data)
-----------------------------输出结果----------------------
[{'date':'2023-03-15','temperature':'10/23℃','weather':'多云','wid':{'day':'01','night':'01'},'direct':'西南风转东北风'},{'date':'2023-03-16','temperature':'9/15℃','weather':'多云转小雨','wid':{'day':'01','night':'07'},'direct':'东南风'}]
以上只是小编简单的介绍几种jsonpath的使用方法,具体的使用需要大家通过项目上进行结合使用,这里小编在推荐一个jsonpath的调试器,我们可以通过调试器进行查看编写是否正确:http://www.atoolbox.net/Tool.php?Id=792。
总结
小编通过简单的案例进行介绍了如何通过jsonpath进行提取json数值,方面我们在做接口测试对于json的数据进行解析,文章中没有太多的知识点,主要是熟能生巧,经常使用,这样在项目中才能灵活运用。感谢您的阅读,希望对您有所帮助。
最后:
1)关注+私信回复:“测试”,可以免费领取一份10G软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Mysql数据库、抓包工具、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试等。
2)关注+私信回复:"入群" 就可以邀请你进入软件测试群学习交流~~
相关推荐
- 独家 | 5 个Python高级特性让你在不知不觉中成为Python高手
-
你已经使用Python编程了一段时间,编写脚本并解决各种问题。是你的水平出色吗?你可能只是在不知不觉中利用了Python的高级特性。从闭包(closure)到上下文管理器(contextmana...
- Python装饰器
-
Python装饰器是一种用于修改函数或类的行为的特殊语法。它们允许在不修改原始代码的情况下,通过将函数或类作为参数传递给另一个函数来添加额外的功能。装饰器本质上是一个函数,它接受一个函数作为参数,并返...
- 中高阶Python常规用法--上下文管理器
-
Python以简单性和通用性著称,是一种深受全球开发人员喜爱的编程语言。它提供了大量的特性和功能,使编码成为一种愉快的体验。在这些功能中,一个经常被新手忽视的强大工具是上下文管理器。上下文管理器是高...
- Python小案例67- 装饰器
-
Python装饰器是一种用于修改函数或类的行为的特殊语法。它们允许在不修改原始代码的情况下,通过将函数或类作为参数传递给另一个函数来添加额外的功能。装饰器本质上是一个函数,它接受一个函数作为参数,并返...
- python常用的语法糖
-
概念Python的语法糖(SyntacticSugar)是指那些让代码更简洁、更易读的语法特性,它们本质上并不会增加新功能,但能让开发者更高效地编写代码。推导式写法推导式是Python最经典的...
- python - 常用的装饰器 decorator 有哪些?
-
python编程中使用装饰器(decorator)工具,可以使代码更简洁清晰,提高代码的重用性,还可以为代码维护提供方便。对于python初学者来说,根据装饰器(decorator)的字面意思并不...
- python数据缓存怎么搞 ?推荐一个三方包供你参考,非常简单好用。
-
1.数据缓存说明数据缓存可以说也是项目开发中比不可少的一个工具,像我们测试的系统中,你都会见到像Redis一样的数据缓存库。使用缓存数据库的好处不言而喻,那就是效率高,简单数据直接放在缓存中...
- 用于时间序列数据的Graphite监视工具
-
结合第三方工具,Graphite为IT性能监控提供了许多好处。本文介绍其核心组件,包括Carbon、Whisper以及安装的基本准则。Graphite监视工具可实时或按需,大规模地绘制来自多个来源的时...
- Python3+pygame实现的坦克大战
-
一、显示效果二、代码1.说明几乎所有pygame游戏,基本都遵循一定的开发流程,大体如下:初始化pygame创建窗口while循环检测以及处理事件(鼠标点击、按键等)更新UI界面2.代码创建一个m...
- Python之鸭子类型:一次搞懂with与上下文装饰器
-
引言在鸭子类型的理念的基础之上,从关注类型,转变到关注特性和行为。结合Python中的魔法函数的体系,我们可以将自定义的类型,像内置类型一样被使用。今天这篇文章中,接着该话题,继续聊一下with语法块...
- Python必会的50个代码操作
-
学习Python时,掌握一些常用的程序操作非常重要。以下是50个Python必会的程序操作,主要包括基础语法、数据结构、函数和文件操作等。1.HelloWorldprint("Hello,...
- 一文掌握Python 中的同步和异步
-
同步代码(Sync)同步就像在一个流水线上工作,每个任务都等待前一个任务完成。示例:机器A切割钢板→完成后,机器B钻孔→完成后,机器C上色。在Python中,同步代码看起来像这样:im...
- python 标注模块timeit: 测试函数的运行时间
-
在Python中,可以使用内置的timeit模块来测试函数的运行时间。timeit模块提供了一个简单的接口来测量小段代码的执行时间。以下是使用timeit测试函数运行时间的一般步骤:导入...
- Python带你找回童年的万花尺
-
还记得小时候的万花尺吧?这么画:一点也不费脑筋,就可以出来这么多丰富多彩的复杂几何图形。具体而言,可以用万花尺玩具(如图2-1所示)来绘制数学曲线。这种玩具由两个不同尺寸的塑料齿轮组成,一大一小。小的...
- Python 时间模块深度解析:从基础到高级的全面指南
-
直接上干货一、时间模块核心类介绍序号类名说明1datetime.datetime表示一个具体的日期和时间,结合了日期和时间的信息。2datetime.date表示一个具体的日期。3datetime.t...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (54)
- python安装路径 (54)
- python类型转换 (75)
- python进度条 (54)
- python的for循环 (56)
- python串口编程 (60)
- python写入txt (51)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python字典增加键值对 (53)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python qt (52)
- python人脸识别 (54)
- python斐波那契数列 (51)
- python多态 (60)
- python命令行参数 (53)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- centos7安装python (53)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)