首页 > 编程语言 >Python 接口自动化Jsonpath 应用及断言

Python 接口自动化Jsonpath 应用及断言

时间:2024-11-16 13:15:46浏览次数:3  
标签:0123 Python number 接口 Jsonpath 4567 ret data jsonpath

jsonpath 的应用:

首先我们要知道,使用 jsonpath 之前我们要有一个对应的数据去进行对应的操作,比如我们工作中会得到的响应数据,基于我们的响应数据 我们要对应的提取 比如 token msg.....所以我们就会用到它 jsonpath。

那在Python 中 我们需要先按转第三方包 安装命令 pip install jsonpath

也可以点击直接安装

真是尴尬 安装失败了

为什么呢?我看了文档 一顿操作猛如虎 发现是  jsonpath 不兼容python 版本,我下载的 python 是3.12 版本不兼容,找了好多方法 累了。。。直接下载个低版本的 python 吧

然后执行命令pip install jsonpath

如果安装成功运行一段代码 返回北京就是正确的啦

import jsonpath
data = {
    'name':'xiaowang',
    'age':'28',
    'city':'北京'
}
ret = jsonpath.jsonpath(data,'$.city')
print(ret)

那我们继续往下 刚才我输入了import jsonpath ,os快捷键进入 command+鼠标点击 jsonpath

我们可以看见是个 py 文件, 我们import jsonpath是导入我们的模块,我们需要通过这个模块来调用这个方法,我们调用方法是 jsonpath.jsonpath。

 jsonpath.jsonpath(data,'$.city')    data(需要提取的数据对象,提取的表达式)

提取的数据对象就是我们的响应数据,提取的表达式 jsonpath 是以$开始

那具体的表达式要怎么写呢 刚开始不熟悉的小伙伴可以用 json 解析器 会帮我自动生成 json 格式

重点⚠️  jsonpath 返回的数据都是列表格式

$:根节点 最外层的花括号

.  :获取子节点

.. :获取所有符合条件的内容(不分层级)

我们现在知道最基本的 那就来试一下 没有数据的可以复制粘贴一下 json  

{
	"firstName": "John",
	"lastName": "doe",
	"age": 26,
	"address": {
		"streetAddress": "naist street",
		"city": "Nara",
		"postalCode": "630-0192"
	},
	"phoneNumbers": [{
			"abc": "uuu",
			"Code": "630-0292",
			"type": "iPhone",
			"number": "0123-4567-8888"
		},
		{
			"type": "home",
			"number": "0123-4567-8911"
		},
		{
			"type1": "jia",
			"number": "0123-4567-8912"
		},
		
		{
			"type2": "jia22",
			"number": "0123-4567-8913"
		},
		{
			"type2": "jia33",
			"number": "0123-4567-8914"
		}
	]
}

那如果两个 type 我们想获取第一个要怎么写呢 用下标的方法来获取 从 0 开始

* :获取所有的元素节点

[index] :通过下标来获取

    [,] :表示多个结果的选择

[start:end] :指定范围内的元素 左闭右开 不包含 end 比如有 5 条数据我们[0:4] 就说明是从 0-3

?(@.a == b) 表示过滤操作 @代表当前节点

知道了 jsonpath 的基本运用 那我们就可一开始浅写一点代码啦

import jsonpath
data = {
	"firstName": "John",
	"lastName": "doe",
	"age": 26,
	"address": {
		"streetAddress": "naist street",
		"city": "Nara",
		"postalCode": "630-0192"
	},
	"phoneNumbers": [{
			"abc": "uuu",
			"Code": "630-0292",
			"type": "iPhone",
			"number": "0123-4567-8888"
		},
		{
			"type": "home",
			"number": "0123-4567-8911"
		},
		{
			"type1": "jia",
			"number": "0123-4567-8912"
		},

		{
			"type2": "jia22",
			"number": "0123-4567-8913"
		},
		{
			"type2": "jia33",
			"number": "0123-4567-8914"
		}
	]
}
ret = jsonpath.jsonpath(data,'$.age')
print(ret)

结果也跟我们之前一样,看返回结果 还是那句话 返回数据一定是个列表!!!

ret = jsonpath.jsonpath(data,'$.phoneNumbers')
print(ret)
[[{'abc': 'uuu', 'Code': '630-0292', 'type': 'iPhone', 'number': '0123-4567-8888'}, {'type': 'home', 'number': '0123-4567-8911'}, {'type1': 'jia', 'number': '0123-4567-8912'}, {'type2': 'jia22', 'number': '0123-4567-8913'}, {'type2': 'jia33', 'number': '0123-4567-8914'}]]

看!!前面是列表套列表  用我们学到的

ret = jsonpath.jsonpath(data,'$.phoneNumbers.*')
print(ret)
[{'abc': 'uuu', 'Code': '630-0292', 'type': 'iPhone', 'number': '0123-4567-8888'}, {'type': 'home', 'number': '0123-4567-8911'}, {'type1': 'jia', 'number': '0123-4567-8912'}, {'type2': 'jia22', 'number': '0123-4567-8913'}, {'type2': 'jia33', 'number': '0123-4567-8914'}]

我们现在有 5 组数据 我们可以用下标索引的方式来看一下第一组和最后一组

print(ret[0])
print(ret[-1])
{'abc': 'uuu', 'Code': '630-0292', 'type': 'iPhone', 'number': '0123-4567-8888'}
{'type2': 'jia33', 'number': '0123-4567-8914'}

jsonpath 提取数据的场景

需要断言:看某个响应字段是不是我们想要的

接口关联:提取当前接口的响应数据,作为下一个接口的请求数据

我们先讲第一个 断言

断言的关键字是 assert

怎么用呢 举例:

assert表达式,当不满足条件的时候提示信息

assert 3 == 3,“两者之间不相等”

如果通过断言则正常运行没有提示,断言只有在条件不满足时才会提示信息

我们可以来简单运行一下代码,因为 1=1 所以不会出来提示信息

assert  1 == 1,'两者之间不相等'

那我们把 1 改成 2 在运行一下

assert  1 == 2,'两者之间不相等'

断言也可以不是==  也可以是> 或者< 逻辑运算符都可以进行运用

那我们现在知道了 post 请求 知道了 jsonpath 知道了断言 那我们来代码写一写

先登录接口 拿到返回数据 msg

在对 msg 来进行断言


import requests
import json
import jsonpath

url = "http://www.baidu.com/php?s=/login"
yu_pramas = {
    "application": "app",
    "application_client_type": "weixin"
}
data = {
    'accounts': 'nihao',
    'pwd': '123ujgh',
    'type': 'username'
}
header = {
    'Content-Type': 'application/json'
}
new_data = json.dumps(data)
ret = requests.post(url, params=yu_pramas, data=new_data, headers=header)
print(ret.text)
mag_ret = jsonpath.jsonpath(ret.json() ,'$.msg')
print("当前提取的数据为:",mag_ret)
assert mag_ret == "登录成功",f"错误,我们当前返回的值是:{mag_ret}"

看运行结果

这时候我们看  当前提取的数据为: ['登录成功']

这是个列表啊 我们用下标索引的方法来取一下值

mag_ret = jsonpath.jsonpath(ret.json() ,'$.msg')[0]

那我们下来跑一下看结果

如果我们改一下密码再看一下 

断言就说到这里啦

标签:0123,Python,number,接口,Jsonpath,4567,ret,data,jsonpath
From: https://blog.csdn.net/weixin_46096113/article/details/143800370

相关文章

  • hadoop+Spark+基于python的大数据航班信息数据分析与可视化系统(源码+文档+调试+可视
    收藏关注不迷路!!......
  • 【Pytorch】Python random 模块
            Python random 模块主要用于生成随机数,是常用的一个包,random 模块实现了各种分布的伪随机数生成器。在训练传统机器学习模型或者深度神经网络模型的过程中经常会用到。要使用 random 函数必须先导入:importrandom1.random()        使用ra......
  • 写一个Python脚本删除一个.py文件的所有注释
    Anyimprovementwouldbeappreciated.importredefremove_comments(file_path):withopen(file_path,'r')asfile:content=file.read()#First,findandstorestringassignmentsprotected_strings={}counter=0......
  • Python 开发(13):文件与目录操作的实用技巧
    Python开发(13):文件与目录操作的实用技巧文件和目录操作是每个开发者在日常工作中不可或缺的部分。Python提供了丰富的文件和目录操作功能,如读取、写入文件、遍历目录、文件权限管理等。这些功能不仅适用于小型脚本项目,在数据处理、自动化任务和服务器开发中也十分常用。......
  • Python 中 if __name__ == ‘__main__‘ 的解释
    1.基本概念   在Python中,`if__name__=="__main__"`是一种常见的代码结构。`__name__`是一个内置变量,它的值取决于模块是如何被使用的。   当一个Python脚本被直接运行时,`__name__`的值被设置为`"__main__"`。而当一个模块被另一个模块导入时,`__name__`的值就是该......
  • 跟着走,Python从入门到精通,一个月就够!
    毫无疑问,Python是当下最火的编程语言之一。对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握Python看似是一件十分困难的事。其实,只要掌握了科学的学习方法并制定了合理的学习计划,Python从入门到精通只需要一个月就够了!如果每天坚持用6-7小时来做一件事,你会......
  • 基于线性回归的粮食产量预测(Python代码)
    一、引言预测粮食产量在农业规划、食品安全和全球经济稳定等多个方面都具有极其重要的意义,其应用场景也十分广泛。以下是对预测粮食产量的重要性和应用场景的详细介绍:1.1预测粮食产量的重要性(1)农业规划与决策支持:粮食产量预测为政府和相关机构提供了农业规划的基础数据。......
  • 网络爬虫 Python 第二课
    BeautifulSoup高级用法:标签查找与筛选:除了简单地通过标签名查找(如 soup.find('div') 查找第一个 div 标签),还可以利用属性来更精准地查找。例如,如果要查找所有 class 属性为 article 的 div 标签,可以使用 soup.find_all('div',class_='article') 。这里注意 cl......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
    摘要随着计算机科学技术日渐成熟,人们已经深刻认识到了计算机功能的强大,计算机已经进入到了人类社会发展的各个领域,并且发挥着十分重要的作用。通过管理系统在电脑上的应用,人们能更好的管理信息,储存数据。为了能够提供游戏商城的方便性,开发了基于vue的游戏网站。此游戏网站......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
    摘要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,招聘网站当然也不能排除在外。招聘网站是以实际运用为开发背景,运用软件工程开发方法,采用互联网技术构建的一个管理系统。整个开发过程首先对软件系统进行需......