首页 > 其他分享 >【接口自动化测试】jsonpath应用:提取数据、断言、接口关联

【接口自动化测试】jsonpath应用:提取数据、断言、接口关联

时间:2024-09-22 22:19:08浏览次数:11  
标签:断言 url res 接口 reality 获取 jsonpath data

安装命令

pip install jsonpath

表达式

import jsonpath

res = jsonpath.jsonpath(obj, expr)

1、返回结果要么是list,要么是False

2、obj  要提取的对象,应为字典类型。报文的格式是json,必须进行数据的转换, 用 json.loads() 将json转换成字典类型

     expr  jsonpath表达式

jsonpath表达式基本语法

$ 根节点,也是所有JsonPath表达式的开始

. 表示获取子节点

.. 表示获取所有符合条件的内容

* 代表所有的元素节点

[index] 表示迭代器的标示(可以用于处理下标等情况)

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

[start:end] 指定范围内的元素

?(@.property == value) 表示过滤操作 # 比较运算符

@ 表示当前节点

在线解析 http://www.atoolbox.net/Tool.php?Id=792

示例

# 获取根目录下的子字段:获取用户名
$.name
# 获取根目录下的字典中的数据:获取地址中的城市("country": "USA")
$.address.country
# 获取根目录下的列表中的某个数据:获取教育经历
$.education[0]
# 获取根目录下的列表中的所有数据中的某个字段:获取教育经历中的年
$.education[0:].year
# 获取根目录下的列表中满足某个条件的数据:获取教育经历中的年等于2020 的数据,== \!=
$.education[?(@.year==2020)]
# 获取所有的数据
$.*

断言(assert)

断言的基本概念是,在代码中插入一条断言语句,该语句会在运行时进行条件判断,如果条件为假(False),则会触发断言错误,并中断程序的执行。如果条件为 真(True),则程序会继续执行。

assert 1==1   # 如果条件为真(True),则程序会继续执行。
assert 1==2   # 如果条件为假(False),则会触发断言错误,并中断程序的执行。
assert 1==2,"结果错误"  # 如果条件为假(False),则会触发断言错误,并中断程序的执行,并打印错误信息

jsonpath断言实例

import requests
import jsonpath
import json

# 案例一:
url = "http://shop-xo.xxxxxx.com/index.php?s=/api/user/login"
public_data = {"application": "app", "application_client_type": "weixin"}
data = {"accounts": "zhousy", "pwd": "123456", "type": "username"}
res = requests.post(url=url, params=public_data, data=data)
# ----------------------------------------
# 获取响应数据
result1 = res.json() # 以字典的格式获取
result2 = res.text # 以文本的格式获取
print(type(result1)) # 字典 <class 'dict'>
print(type(result2)) # 字符串 <class 'str'>

# 实际结果
# 字典格式:直接获取数据
# reality_res= jsonpath.jsonpath(result1, "$.msg")
# 字符串格式:先通过.loads()进行转换
dict_data = json.loads(result2)
reality_res = jsonpath.jsonpath(dict_data, "$.msg")
# 期望结果
desire_res = "登录成功"
# 断言:期望结果 == 实际结果
# assert desire_res == reality_res # 是一个列表需要通过下标获取具体的值
assert desire_res == reality_res[0]
print(reality_res)

接口关联

示例:通过登录接口获取token,用户加入购物车

import requests
import jsonpath

# 案例一:登录接口
url = "http://shop-xo.xxxxxx.com/index.php?s=/api/user/login"
public_data = {"application": "app", "application_client_type": "weixin"}
data = {"accounts": "hami", "pwd": "123456", "type": "username"}
res = requests.post(url=url, params=public_data, data=data)
# ----------------------------------------
# 获取响应数据
result = res.json()
print(f"响应结果是:{result}")
# 期望结果
desire_res = "登录成功"
# 实际结果
reality_res = jsonpath.jsonpath(result, "$.msg")
# 断言:期望结果 == 实际结果
# assert desire_res == reality_res # 是一个列表需要通过下标获取具体的值
token = jsonpath.jsonpath(result, "$.data.token")
print(f"获取到的token值为:{token}")
assert desire_res == reality_res[0]

# 案例二:加入购物车
url = "http://shop-xo.xxxxxx.com/index.php?s=/api/cart/save"
# public_data = {"application": "app", "application_client_type": "weixin", "token":
"8ae1ce79ed621a991a5e53ba9f96bfd3"}
public_data = {"application": "app", "application_client_type": "weixin", "token":
token}
data = {
"goods_id": "11",
"spec": [
{
"type": "尺寸",
"value": "M"
}
],
"stock": "10"
}
res = requests.post(url=url, params=public_data, data=data)
print(f"请求的url是:{res.url}")
# 获取响应数据
result = res.json()
print(f"响应结果是:{result}")
# 期望结果
desire_res = "加入成功"
# 实际结果
reality_res = jsonpath.jsonpath(result, "$.msg")
assert desire_res == reality_res[0]

标签:断言,url,res,接口,reality,获取,jsonpath,data
From: https://blog.csdn.net/weixin_46337259/article/details/142388612

相关文章

  • 使用Postman测试MQTT协议接口
    MQTT概述MQTT(MessageTelemetryTransport)是一种用于物联网(IoT)的消息传递协议。它的使用范围从家庭自动化和可穿戴设备的小型设备到大型工业机械的自动化。它是一种轻量级技术,以发布/订阅模式为模型,其中连接到单个代理的客户端可以将消息发布到不同的主题,并订阅主题以接收来自......
  • SpringBoot接口防抖(防重复提交)的一些实现方案
    Java专栏2024年09月20日12:20甘肃来源:juejin.cn/post/7308992638468227109前言啥是防抖思路解析分布式部署下如何做接口防抖?具体实现请求锁唯一key生成重复提交判断前言作为一名老码农,在开发后端Java业务系统,包括各种管理后台和小程序等。在这些项目中,我设计过单/多......
  • Java创建接口详细过程
    在Java中,创建mapper、dao(数据访问对象)、service、serviceImpl(service实现类)、controller等组件是构建企业级应用常见的分层架构模式。这种分层架构有助于实现高内聚低耦合的设计,提高代码的可维护性和可扩展性。mapperrXML文件创建MapperXML文件用于定义Java对象和数据库表......
  • 论 JAVA 集合框架中 接口与类的关系
    前言这是笔者在学习过程中的一篇"备忘录",其目的是能用最EZ最粗鄙的语言口述出JAVA集合框架中所有类与接口的关系本人在不断地学习中,总会混淆集合框架中的类和接口,以及它们的作用关系,虽然不影响我的使用,但是我也不想一直糊涂下去,故而趁知识还没混淆之际,赶紧写下来.......
  • 淘宝商品详情数据接口包括哪些参数
    ‌淘宝商品详情数据接口‌的参数主要包括商品ID(num_iid)、是否获取促销价(is_promotion)、返回的字段列表(fields)等。这些参数的选择可以根据开发者的需求灵活调整,以获取所需的商品详情信息。‌商品ID(num_iid)‌:这是淘宝商品详情数据接口的核心参数,用于唯一标识一个淘宝商品。通过......
  • 淘系商品评论数据洞察:通过接口挖掘用户反馈
    淘宝商品评论API接口是淘宝开放平台提供的一种应用程序接口,它允许第三方开发者通过特定的请求方式和参数,获取淘宝商品的评论数据。   ——在成长的路上,我们都是同行者。这篇关于淘系商品评论数据洞察:通过接口挖掘用户反馈的文章,希望能帮助到您。期待与您继续分享更多......
  • QT硬件接口设计
    QT硬件接口设计使用AI技术辅助生成QT界面美化视频课程QT性能优化视频课程QT原理与源码分析视频课程QTQMLC++扩展开发视频课程免费QT视频课程您可以看免费1000+个QT技术视频免费QT视频课程QT统计图和QT数据可视化视频免费看免费QT视频课程QT性能优化视频免费看免费QT......
  • 软件测试笔记|web自动化测试|Selenium 提供了哪些断言?
    Selenium主要通过与测试框架(如TestNG、JUnit等)结合使用来实现断言,本身并没有内置断言方法。以下是一些常用的结合测试框架实现的断言:一、TestNG框架中的断言:1.assertEquals(expected,actual):比较两个值是否相等。例如:importorg.testng.Assert;publicclassTestSel......
  • 接口统一用 POST 请求原因
    在公司规定所有接口都使用POST请求可能有以下几个原因:一、数据安全性考虑1.参数隐藏   POST请求将数据放在请求体中,不像GET请求那样将参数暴露在URL中。这样可以减少敏感信息被直接看到的风险,例如用户的密码、身份证号等重要数据在传输过程中不容易被窃取。......
  • D13【python接口自动化学习】-python基础之内置数据类型
    day13集合学习日期:20240920学习目标:内置数据类型--22常见常新:集合的常见操作学习笔记:集合与set对象创建set对象set对象的常用操作#使用set对象对元组去重color=('r','g','b','g','b','b')#创建元组new_color=set(color)#转换set对象去重print(new_color)#......