【接口测试_04课_Jsonpath断言、接口关联及加密处理】

news2024/11/15 10:57:57

一、Jasonpath的应用

JsonPath工具网站:JSONPath解析器 - 一个工具箱 - 好用的在线工具都在这里!

1、JSONPath的手写与获取

手写JSONPath

1、

$   (英文美元符号)代表外层的{}

.   (英文句号)表示当前层级

1)$.  代表获取当前层级下的key

 1.1)默认是最外层

$.name $.address

1.2)再里面一层,就再加一个 英文句号

$.address.city

2)$..代表获取任意层级的所有的这个Key

2.1)两个英文句号,代表任意层级的所有这个key

 $..city 

 2.2)一个key里面有多个value(列表 [ ]),要使用..获取

$..hobbies 

 

2.3)多个value 只取里面的一个值,就按列表的方式通过下标获取即可

2.4) 列表里面套元组,下标获取值

2.5) 列表里面套元组,切片符获取值

 [0:]切片符,认为是从前面写的值0下标,默认到最后一个下标

2.6) 列表里面套元组,[*]代表列表里的所有下标

2.7) 列表里面套元组,表达式获取值

写在列表里面,?() 里面是表达式,@表示当前目录层级   key ==value是表达式的内容

2、通过代码实现获取JSONPath 

1、先安装JSONPath的库

import jsonpath

格式:

jsonpath.jsonpath(data, "$.name")

data 是jsonpath对象

""里面是JSONPath的值

# 注意:
# 1. jsonpath处理的数据必须是字典格式
# 2. 报文的格式是json,必须进行数据的转换。
# 3. json.loads() 将json转换成字典类型

因为JSONPath是python的库,所以必须转化成python可以处理的类型

2、写代码

1)简单获取JSONPath
import jsonpath

data = {
    "name": "Alice",
    "age": 25,
    "email": "alice@example.com",
    "address": {
        "street": "456 Elm Street",
        "city": "Los Angeles",
        "country": "USA"
    },
    "hobbies": ["reading", "traveling", "cooking"],
    "education": [
        {
            "degree": "Bachelor's",
            "major": "Computer Science",
            "university": "ABC University",
            "year": 2018
        },
        {
            "degree": "Master's",
            "major": "Business Administration",
            "university": "XYZ University",
            "year": 2020
        }
    ],
    "projects": [
        {
            "name": "Project A",
            "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
            "contributors": ["John", "Sarah", "Mike"],
            "completed": "true"
        },
        {
            "name": "Project B",
            "description": "Nulla vel sagittis elit. Vivamus auctor massa in lacinia pellentesque.",
            "contributors": ["Alice", "David"],
            "completed": "false"
        }
    ],
    "is_active": "true"
}

res1 = jsonpath.jsonpath(data, "$.name")
res2 = jsonpath.jsonpath(data, "$..year")

print(res1)  # ['Alice']
print(res2)  # [2018, 2020]

2) JSONPath断言
注意:
程序报错,代码运行结果断言不正确,要思考2方面

# 1. 当你觉得你的数据是一致的,那么就尝试打印出来看看--print()函数
# 2. 如果说打印出来还是一样的,考虑一下数据类型---type()函数

 

import jsonpath
import requests

url = "http://shop-xo.hctestedu.com?s=api/user/login"
public_data = {"application": "app", "application_client_type": "weixin"}
data = {"accounts": "hami", "pwd": "123456", "type": "username"}

res = requests.request("post", url=url, params=public_data, data=data)

sj_res_code = jsonpath.jsonpath(res.json(), "$.code")[0]
print("实际结果sj:", sj_res_code)
print("实际结果类型:", type(sj_res_code))

qw_res_code = "0"

print("期望结果qw:", qw_res_code)
print("期望结果类型:", type(qw_res_code))
assert sj_res_code == qw_res_code, "结果不一致"

 二、接口关联

什么是接口关联?
上一个接口的响应数据,做为下一个接口的请求数据。

关联-- jsonpath (提取响应数据的值)
一个业务(模块)逻辑包含这四个操作,做四件事情:增删改查。
用户登录模块:注册用户(新增),后台-删除用户(删除),修改个人信息(修改),用户列表(查询)
提交订单模块:提交订单(新增),后台-删除订单、用户-删除订单(删除),修改订单信息(修改),订单列表(查询)

购物车模块:加入购物车(新增),删除购物车(删除),修改商品规格(修改),购物车列表(查询列表)  --- id--- XX列表

接口测试,一般都有的四个操作:增删改查

核心:
1. 一般接口都会有这个区分(没有经验的小伙伴一定要学会举一反三)
2. 查询一般是可以看对应详情【列表接口(带有一些主要的信息)、某个详情接口】

1、登录获取token

url = "http://shop-xo.hctestedu.com/index.php?s=/api/user/login"
params = {"application": "app", "application_client_type": "weixin"}
data = {"accounts": "hami", "pwd": "123456", "type": "username"}



# 方法一:
res = requests.post(url=url, params=params, data=data)

# ----------------------------------------
# 获取响应数据
result = res.json()
print(f"响应结果是:{result}")

# 断言
sj_res = jsonpath.jsonpath(result, "$.msg")[0]
qw_res = "登录成功"
assert sj_res == qw_res, "结果不一致"


# 获取token数据
token = jsonpath.jsonpath(result, "$..token")[0]
print('token:',token)

2、使用token,加入购物车

import jsonpath
import requests

# 场景一:登录、加入购物车(谁加入购物车--某个人--某个人就涉及鉴权--需要拿到token)
url = "http://shop-xo.hctestedu.com/index.php?s=/api/user/login"
params = {"application": "app", "application_client_type": "weixin"}
data = {"accounts": "hami", "pwd": "123456", "type": "username"}



# 登录请求:就下面这1行
res = requests.post(url=url, params=params, data=data)

# ----------------------------------------
# 获取响应数据
result = res.json()
print(f"响应结果是:{result}")

# 断言
sj_res = jsonpath.jsonpath(result, "$.msg")[0]
qw_res = "登录成功"
assert sj_res == qw_res, "结果不一致"


# 获取token数据
token = jsonpath.jsonpath(result, "$..token")[0]
print('token:',token)


#  接口一:加入购物车的接口
url = "http://shop-xo.hctestedu.com/index.php?s=/api/cart/save"
params = {"application": "app", "application_client_type": "weixin", "token": token}#token需要写到params里面
data = {
    "goods_id": "11",
    "spec": [
        {
            "type": "尺寸",
            "value": "M"
        }
    ],
    "stock": "10"
}

# 添加购物车请求(用了登录请求的token):下面这2行
res = requests.post(url=url, params=params, data=data)
print(res.json())

三、加密算法--不一定非要自己写出来,AI即可

 常见加密方式解析网站:AES加密解密

 正常数据传送,如果再路由阶段,被修改请求,把查询余额改为转账,那么就完蛋了

通过HTTPS传输,协议权威,但是不一定绝对有效

 自己加密

 常见加密方式解析网站:AES加密解密

1、对称加密

对称加密:加密和解密方式是一样的。密钥相同(公钥)。两边规则一致

两边都有新华字典,代码是页数第几个字,就是一种密文 

2、非对称加密


非对称加密:密钥不同(公私钥)

非对称加密非为:公钥(用来数据加密的)和私钥(用来解密操作,保持私密)

1)通过cmd打开jar包

打开cmd  默认是C盘,那么我们需要切到D盘

直接

D:  回车即可

 

然后在D盘打开某个文件夹,就是使用cd 命令。文件路径直接从电脑复制即可

 

cd过后,通过java -jar  包名  命令,启动jar包项目。 启动成功后,不要关闭窗口

 然后,就可以访问接口文档了:http://127.0.0.1:8080/doc.html

 打开文档:

进行调试,说明系统响应正确--非加密

 加密的访问不通

知悉上面的加密规则

生成对应的加密数据--用户名和密码这些传参,都需要进行加密处理才行

 

 

生成的加密数据,再传参:加密网站:AES加密解密

 

解密

输出变输入。格式也互换

 2)通过AI完成加解密算法工具

AI工具:文心一言

通过chatgpt生成 加密和解密的算法代码

老师提供的一些加密的demo

 

实例化的是密钥的对象

enc :加密

dec :解密

 举例

通过AI的代码,修改,对我们登录的用户名和密码进行加密,然后将密文进行请求。生成token

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4K型护套连接器与喇叭口替换插座

4K型护套连接器概述 4K型护套连接器作为煤矿一款关键的电气连接产品,一般安标认证型号包含:LCFB-4、LCFB-6、LCYB-8、LCYB-4、LCYB-8。根据不同的厂家也会有不同订货型号ZE0703-09/DLJ0601/conmN/4c等 4K型护套连接器是一种专为煤矿、非煤矿、石油化工等…

N的阶乘(高精度)

目录 题目描述 输入格式 输出格式 样例输入 样例输出 思路 参考代码 题目描述 输入正整数n,输出n! 输入格式 一个正整数n,n 3000 输出格式 输出n! 样例输入 3 样例输出 9 思路 主要就是高精度乘法的模版&#x…

Docker-镜像迁移的三种方式=>备份恢复公有仓库私有仓库

制作好的镜像要被别人使用,有三种方式: 1.先备份镜像,别人通过u盘或者其它方式拷贝后,再恢复镜像,这种方式比较麻烦 2.将制作的镜像上传到公共镜像仓库,被别人拉取后使用,但可能存在网络不通畅或…

Gitlab不允许使用ssh拉取代码的解决方案

一、起因 之前一直是用ssh进行代码拉取,后来公司搞网安行动,不允许ssh进行连接拉取代码了 因为我是用shell写了个小型的CI/CD,部署前端项目用于后端联调的,因此在自动部署时,不方便人机交互,所以需要自动填充账密。 …

Kibana创建ElasticSearch 用户角色

文章目录 1, ES 权限参考2, 某应用的管理员权限:可以open/close/delete/cat/read/write 索引3, 某应用的读写权限:可以cat/read/write 索引 (不能删除索引或数据)4, 某应用的只读权限 1, ES 权限参考 https://www.elastic.co/gui…

Android 14 - 绘制体系 - 概览

从Android 12开始,Android的绘制系统有结构性变化, 在绘制的生产消费者模式中,新增BLASTBufferQueue,客户端进程自行进行queue的生产和消费,随后通过Transation提交到SurfaceFlinger,如此可以使得各进程将缓…

排序算法——上

一、冒泡排序: 1、冒泡排序算法的思想 我们从左边开始把相邻的两个数两两做比较,当一个元素大于右侧与它相邻的元素时,交换它们之间位置;反之,它们之间的位置不发生变化。冒泡排序是一种稳定的排序算法。 2、代码实现…

智能单款计划助力品牌利润增长

零售品牌若要在激烈的市场竞争中胜出,季中单款的管理无疑是商品生命周期管理的核心环节之一。而单款计划的制定,首先依赖于对爆款、平销及滞销产品的敏锐洞察。一个利润现象不得不引起我们的关注:爆款产品的销售,往往成为拉动品牌…

「实用推荐」如何为桌面 移动跨平台应用选择UI框架/APP架构?

DevExpress .NET MAUI UI组件库提供了用于Android和iOS移动开发的高性能UI组件,该库包括数据网格、图表、日程、数据编辑器、CollectionView和选项卡组件。 获取DevExpress .NET MAUI最新正式版下载(Q技术交流:532598169) “一次编写&#…

03 FreeRTOS 同步互斥与通信

1、同步与互斥 一句话理解同步与互斥:我等你用完厕所,我再用厕所。 什么叫同步?就是:哎哎哎,我正在用厕所,你等会。 什么叫互斥?就是:哎哎哎,我正在用厕所,你…

笔试强训week6

day1 Q1 难度⭐⭐ 小红的口罩_牛客小白月赛41 (nowcoder.com) 题目: 疫情来了,小红网购了 n 个口罩。 众所周知,戴口罩是很不舒服的。小红每个口罩戴一天的初始不舒适度为 ai​。 小红有时候会将口罩重复使用(注:…

什么是死锁,如何解决?

一、问题解析 死锁是指两个或两个以上的进程(或线程)在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些…

网上有哪些正规的兼职副业赚钱平台?分享10类正规的网上兼职赚钱平台,让你在家也能赚钱~

在如今的快节奏社会中,越来越多的人开始寻求兼职副业来增加收入。而随着互联网的普及,网上赚钱平台成为了许多人选择的方式之一。然而,面对众多的网上赚钱平台,我们要如何辨别哪些是正规可靠的呢?在本文中,…

解读:Mint Blockchain 最新路线图,释放 NFT 生态重磅发展计划

作者:Mint Ecosystem 关于 Mint Blockchain:Mint Blockchain 是一个以太坊原生 L2 网络,核心是发展 NFT 生态和产业,促进 NFT 领域的 Mass Adoption 产生。MintCore 团队致力于将 Mint Blockchain 打造成一个围绕服务 NFT 资产的…

6万转高速主轴电机哪个品牌好?

近年来,随着全球科技的迅猛发展,各个工业领域对高精密零件加工的需求日益旺盛,特别是在医疗、航天航空、通讯技术等领域,对工件的精密性要求达到了前所未有的高度。在这样的背景下,高转速,高精密的高速电主…

yolo 算法 易主

标题:YOLOv10: Real-Time End-to-End Object Detection 论文:https://arxiv.org/pdf/2405.14458ethttps%3A//arxiv.org/pdf/2405.14458.zhihu.com/?targethttps%3A//arxiv.org/pdf/2405.14458 源码:https://github.com/THU-MIG/yolov10 分析…

哈夫曼树,哈夫曼编码和线索二叉树

前言 在数据压缩中,如电脑中的压缩软件,哈夫曼编码应用比较广泛,因此被称作最优二叉树。下面时哈夫曼树的一些定义。 哈夫曼树 定义 代码 下面时哈夫曼树的初始化和创建: #include "stdio.h"#define MAXSIZE 5 typedef struct {int weigth;int parent, lchi…

SSRS中使用QRCoder生成二维码

步骤 1.下载QRCoder.dll 下载地址:https://download.csdn.net/download/wjl7126180/89369398 2.使用gacutil.exe安装QRCoder.dll到GAC(Global Assembly Cache) gacutil.exe是全局程序集缓存工具,需要安装.NET Framework才会存在,如果没有…

质量人,你还在等什么?快来六西格玛培训公司充电吧!——张驰咨询

在竞争激烈的商业环境中,质量成为了企业生存和发展的关键。而六西格玛,作为一种全球公认的质量管理方法论,正在成为越来越多企业追求品质革命的重要工具。而六西格玛培训公司,则成为了这场品质革命中,质量人不可或缺的…

SSH秘钥对简化github项目管理(外加Tortoise配置)

文章目录 使用SSH秘钥对简化github项目管理为什么要用密钥对?如何使用SSH方式克隆版本库呢?补充:使用TortoiseGit(小乌龟)快速访问github远程仓库!结尾:喜欢的小伙伴可以点点关注赞哦 使用SSH秘…