requests---jsonpath在接口自动化中的应用

目录

前言

jsonpath

通过下标提取

通过jsonpath提取

jsonpath的其他用法

通过$获取属性值内容

通过【*】获取对应值

通过切片获取对应值

总结


前言

  我们在做接口测试时,大多数返回的都是json属性,我们需要通过接口返回的json提取出来对应的值,然后进行做断言或者提取想要的值供下一个接口进行使用,但是如果返回的json数据嵌套了很多层,通过查找需要的词,就很麻烦不方面,小编今天介绍一种python的第3方库jsonpath

jsonpath

jsonPath是使用一种简单的方法来提取给定JSON内容。在我们做接口测试时,目前流行的数据格式就是JSON格式的,当碰到复杂JSON格式时,我们可以使用JsonPath快速提取数据或者更新数据。

安装:pip install jsonpath

jsonpath

说明

*

通配符,匹配所有元素

$

查询根节点

@

查询当前节点

.

表示子节点

..

递归搜索节点

[start:end]

数组切片操作

[?()]

过滤表达

小编先通过正常的接口,获取一段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提取

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的调试器,我们可以通过调试器进行查看编写是否正确

 

总结

小编通过简单的案例进行介绍了如何通过jsonpath进行提取json数值,方面我们在做接口测试对于json的数据进行解析,文章中没有太多的知识点,主要是熟能生巧,经常使用,这样在项目中才能灵活运用。感谢您的阅读,希望对您有所帮助。

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

 我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

   Python自动化测试学习交流群:全套自动化测试面试简历学习资料获取点击链接加入群聊【python自动化测试交流】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DhOSZDNS-qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=198408628

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浏览器种输入一个url到显示页面全过程

原文合集地址如下,有需要的朋友可以关注 本文地址 合集地址 所谓的‘三颗树’ 在浏览器中,当解析和加载网页时,会形成三个重要的树结构:DOM树、CSSOM树和渲染树(Render Tree)。这些树结构在网页的渲染和…

基于SQLI的SQL字符型报错注入

基于SQLI的SQL字符型报错注入 一. 实验目的 理解数字型报错SQL注入漏洞点的定位方法,掌握利用手工方式完成一次完整SQL注入的过程,熟悉常见SQL注入命令的操作。 二. 实验环境 渗透主机:KALI平台 用户名: college 密码: 360College 目标网…

web安全php基础_php数据类型

PHP 数据类型 PHP 支持以下几种数据类型: String(字符串)Integer(整型)Float(浮点型)Boolean(布尔型)Array(数组)Object(对象)NULL&…

算法----Nim 游戏

题目 你和你的朋友,两个人一起玩 Nim 游戏: 桌子上有一堆石头。 你们轮流进行自己的回合, 你作为先手 。 每一回合,轮到的人拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。 假设你们每一步都是最优解。请编写一个函数&a…

Kubernetes 启动Pod的方法-Pod的调度算法-Pod间的通信-k8s的控制器-Pod资源控制-发布Service服务

目录 Pod 参考文档:Pod | Kubernetes Pod配置文件:simple-pod.yaml 对master进行如下操作 Pod的状态有: 参考文档:(70条消息) Pod生命周期中的状态解释_pod状态_闹玩儿扣眼珠子的博客-CSDN博客 进入Pod内的nginx容器&#…

Linux快速搭建Java环境

1. 安装JDK运行与调试 搭建Java环境 1. 安装JDK 打开命令行执行 sudo apt install default-jdk 有确定的选项直接y就行 安装拓展: 1 . 有时候vscode会自动弹出消息叫你安装拓展,直接点击全部安装就行了 2 . 未弹出或安装失败解决: 打开拓展搜索,把下面的,全部安装就行 这样就可…

Nginx(6)nginx的缓存集成

缓存集成 Nginx缓存集成缓存的概念Nginx的web缓存服务 缓存设置的相关指令Nginx缓存设置案例 Nginx缓存的清除Nginx设置资源不缓存 Nginx缓存集成 缓存的概念 缓存就是数据交换的缓冲区(称作Cache),当用户要获取数据的时候,会先从缓存中去查询获取数据…

TikTok将在10月份之前免除佣金并提供补贴!

TikTok 因其便捷的结账方式越来越吸引美容品牌,Elf Beauty Laura Mercier、BareMinerals KimChi Chic Beauty 和 Skin Gym 等美容品牌已经接受了社交网络的结账功能。在这种情况下,该工具允许消费者将多个品牌的产品添加到应用内购物车中。 在巴西&…

动态路由,微信小程序绑定

■登录成功之后添加动态路由 ●登录的时候会获取到它的菜单配置■动态路由 | Vue Router <view wx:for"{{list}}">{{index}}--- {{item.name}} </view><view wx:for"{{list}}" wx:for-item "ttt" wx:for-index"num"&…

(02)Cartographer源码无死角解析-(79) ROS服务→子图压缩与服务发送

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/127350885 文…

机器学习——掌握决策树ID3算法的原理,通过增益熵实现手工推导的过程。

文章目录 决策树介绍优缺点ID3算法原理举例 决策树的构建1、特征选择&#xff08;1&#xff09;香农熵&#xff08;2&#xff09;信息增益 2、决策树的生成3、决策树的修剪 总结&#xff1a;参考文献 决策树 介绍 决策树(decision tree)是一种基本的分类与回归方法。ID3是其中…

Linux学习之分区和挂载磁盘配额

先分区然后格式化。 fdisk /dev/sdb开始分区。 输入p&#xff0c;然后按下Enter&#xff0c;可以查看当前设备的分区情况。 输入d&#xff0c;然后按下Enter&#xff0c;就可以删除上边的分区&#xff0c;要是有多个分区&#xff0c;会让你选择删除哪个分区。 输入n&…

mysql基础5——mysql主从

文章目录 一、基本了解二、主从原理三、主从复制3.1 从无到有3.1.1 服务器初始化3.1.2 配置主库3.1.3 配置从库3.1.4 效果验证 3.2 从有到无3.2.1 主库全备&#xff0c;并同步到从库3.2.2 配置主库3.2.3 配置从库3.2.4 效果验证 四、数据库运维4.1 几个参数4.2 查看进程列表 一…

MATLAB | 如何使用MATLAB获取顶刊《Nature》全部绘图(附带近3年全部图像)

我出了如何使用MATLAB获取期刊《Cell》全部绘图&#xff0c;立马就有粉丝问《Nature》、《Sience》、《PNAS》啥的会不会安排&#xff0c;这期就给大家安排《Nature》全部绘图获取&#xff0c;之后其他期刊也会慢慢安排&#xff0c;但是不会一次性全出完(毕竟不能抓住一个主题就…

【Java基础教程】(五)程序概念篇 · 下:夯实基础!全面解析Java程序的逻辑控制体:顺序、选择与循环结构~

Java基础教程之程序概念 下 本节学习目标1️⃣ 程序逻辑控制1.1 顺序结构1.2 分支结构1.2.1 if 选择结构1.2.2 switch 选择结构 1.3 循环结构1.3.1 while 循环1.3.2 for 循环1.3.3 循环控制 &#x1f33e; 总结 本节学习目标 掌握Java中分支结构、循环结构、循环控制语法的使…

Squid 缓存代理--反向代理

Squid 缓存代理–反向代理 反向代理&#xff1a;如果Squid反向代理服务器中缓存了该请求的资源&#xff0c;则将该请求的资源直接返回给客户端&#xff1a;否则反向代理服务器将向后台的WEB服务器请求资源&#xff0c;然后将请求的应答返回给客户端&#xff0c;同时也将应答缓…

Django框架-11

聚合查询 1.聚合函数 使用aggregate()过滤器调用聚合函数。聚合函数包括&#xff1a;Avg 平均&#xff0c;Count 数量&#xff0c;Max 最大&#xff0c;Min 最 小&#xff0c;Sum 求和&#xff0c;被定义在django.db.models中。 例&#xff1a;查询图书的总阅读量。 from mo…

如何确定活动隔断整体色调

确定活动的整体色调可以通过以下几个步骤&#xff1a; 1. 确定主题或目标&#xff1a;首先要明确活动的主题或目标&#xff0c;这将有助于确定活动需要传达的情感或氛围。 2. 考虑活动类型&#xff1a;根据活动的类型&#xff0c;例如婚礼、生日派对、企业活动等&#xff0c;可…

vue3+pinia用户信息持久缓存(token)的问题

vue3pinia用户信息持久缓存&#xff08;token)的问题 对博主来说&#xff0c;这是个相当复杂的问题。 当初在使用vue2vuex进行用户信息持久登录时&#xff0c;写了不下3篇博客&#xff0c;确实是解决了问题&#xff0c;博客链接如下 vue存储和使用后端传递过来的tokenvue中对…

gma 2 教程(二)数据操作:1. 相关模块组成

考虑到数据读写是地理空间数据分析和应用的基础&#xff0c;因此将本章作为正文第一部分&#xff0c;以便为后续章节应用提供基础支持。本章以gma栅格/矢量数据输入输出模块&#xff08;io&#xff09;栅格/矢量数据的读取、创建、变换等主要操作为基础&#xff0c;配合gma地理…