接口测试——接口协议抓包分析与mock_L2
目录:
- 抓包工具charles
- 抓包工具fiddler
- 抓包工具证书配置
- app抓包实战练习
- 接口测试实战练习
1.抓包工具charles
工具介绍
- 支持 SSL 代理
- 支持流量控制
- 支持重发网络请求,方便后端调试
- 支持修改网络请求参数
- 支持网络请求的截获并动态修改
- 可以自动将 json 或 xml 数据格式化,方便查看
安装
- Charles 官网:
- https://www.charlesproxy.com/
Charles配置:Charles下载与安装教程(超详细)_不要问我y的博客-CSDN博客
Charles下载安装_choo choo charles下载教程_会飞的咕咕鱼的博客-CSDN博客
2.抓包工具fiddler
工具介绍
- 官网:https://www.telerik.com/fiddler/fiddler-classic
- Fiddler 是位于客户端和服务器端的 HTTP 代理
- 也是目前最常用的 HTTP 抓包工具之一
- 功能
- 监控流量
- 支持解密 HTTPS
- 查看分析接口数据
- 修改请求的数据
- 修改服务器返回的数据
- 设置断点
界面简介
- 菜单栏
- 工具栏
- Session 面板
- 详情和数据统计面板
- 状态栏
抓取 HTTP 请求
- 设置:Tools -> Options -> Connections
- 确认抓包端口:默认为 8888
- 默认勾选 Act as system proxy on startup
抓取 HTTPS 请求
- Tools -> Fiddler Options -> HTTPS
- 勾选 Decrypt HTTPS Traffic
- 弹出安装证书弹窗 -> 选择【Yes】-> 点击 【Yes】安装证书
- 点击 Actions -> Open Windows Certificate Manager 查看证书
抓取移动端请求
- Tools -> Fiddler Options -> Connections
- 勾选 Allow remote computers to connect
- 移动端与电脑处于同一网络下
- 移动端配置网络代理
- 代理服务器主机:电脑IP
- 代理服务器端口:8888
- 浏览器输入 http://电脑ip:8888 下载 Fiddler 证书进行安装
注意:fiddler,模拟器的端口要一致:
查看接口信息
- Statistic:性能与统计数据
- Inspectors:请求和响应数据
- Filter:制定过滤规则
- Composer:编辑发出请求
AutoResponder
- 拦截某一请求,并重定向到本地的资源,或者使用 Fiddler 的内置响应
- 用于调试服务器端代码而无需修改服务器端的代码和配置
断点
- 菜单栏 -> Rules -> Automatic Breakpoints ->选择断点方式
- 状态栏点击
- 请求前断点:向上箭头
- 响应后断点:向下箭头
- 命令行下输入
- 请求前断点:
bpu xxx
- 响应后断点:
bpafter xxx
- 请求前断点:
弱网
- 菜单栏 -> Rules -> Performance -> Simulate Modem Speeds
- 修改网络配置参数
- 菜单栏 -> Rules -> Customize Rules…
- 搜索关键词 simulate
- 修改延迟时间
3.抓包工具证书配置
Charles 基础设置
电脑证书配置
Windows 系统安装证书
Charles 端设置 ssl
移动端代理配置
- 设备和电脑处于同一 WIFI(模拟器不需要配置)
- 移动端网络设置
- 服务器 ip 地址
- 设置端口
- 安装证书
- 系统浏览器访问 chls.pro/ssl
- iOS:描述文件中安装证书
- iOS:信任证书
- 演示使用 mumu 模拟器(Android 6)
注意事项
- Android 6 以上的系统 app 默认不信任抓包证书
- 需要开发修改代码
- 大部分测试 app 安装包默认打开状态
- iPhone 10 系统以上需要在 设置->通用->关于本机->证书信任设置 中打开信任开关
4.app抓包实战练习
抓包原理
接口抓包分析实战
- 抓取接口数据
- Overview:接口的大体情况
- Content:请求信息和响应信息
- 上半部分:请求,请求头信息,请求参数,cookie
- 下半部分:响应,响应头信息,响应体(不同格式)
- Summary:响应时间
- Chart:图标形式的资源情况展示
- Notes:写一些记录
过滤
- Filter
- Focus
- Recording Settings – Include
重发
- 简单重发:鼠标右键 – Repeat
- 简单压力:鼠标右键 – Repeat Advanced
修改请求
- 鼠标右键 – Compose
- 选择接口 – 点击小钢笔图标
断点(BreakPoint)
- 调整接口的参数信息
- 鼠标右键 — Breakpoint
- Proxy – Breakpoint settings 设置断点
- 确定接口信息,确定是请求断点还是响应断点
- 重新发送请求 – 进入断点修改状态 – 修改内容 – 点击 Excute
5.接口测试实战练习
- LiteMall 搜索接口抓包分析
- LiteMall 搜索接口测试用例设计
- Postman 完成接口测试
- 数据驱动
- 测试集的导入和导出
- 使用 Cookies
- 鉴权方式
- 参数传递
- 设置鉴权
- 请求前脚本中获取参数
- 导出代码
LiteMall 搜索接口抓包分析
- LiteMall 商城:https://litemall.hogwarts.ceshiren.com/vue/index.html#/
- 浏览器开发者工具抓包:Network
抓包分析:
得出请求地址:https://litemall.hogwarts.ceshiren.com/wx/goods/list
查看响应:
分析响应内容:并且生成接口文档:Python: 66666666666666
LiteMall 搜索接口测试用例设计 (根据上边的接口文档进行测试用例设计)
编写测试用例:SoftwareTest: 用来存放软件测试的代码或者文档
使用Postman 完成接口测试
- 保存 har 导入 postman
- 创建测试集
- 创建接口测试用例
保存 har 导入 postman
根据测试用例,使用postman编写脚本
导出测试集为json格式:SoftwareTest: 用来存放软件测试的代码或者文档
数据驱动
- 准备数据:JSON 或者 CSV 格式
- 修改参数设置
- 修改断言
- 在测试集中定义数据变量
- 运行测试集,选择准备好的数据
准备数据:CSV 格式数据
配置参数 :
使用csv格式的数据:
配置测试集变量:
运行:
运行结果:
准备数据:JSON 格式数据 SoftwareTest: 用来存放软件测试的代码或者文档
直接使用上边csv格式,配置的一些参数,我们只换了个数据格式,直接复用上边csv配置的参数,运行:
运行结果:
测试集的导入和导出
- 测试集导入
- 测试集导出
使用 Cookies
如果登录使用的是cookie这种方式,在postman中只要成功登录一次,登录成功之后的cookie信息就会保存在postman中,之后请求该网站其他接口时候,会自动在header中带上cookie,下面以百度为例:
1.填入url,点击headers查看,没有cookie信息
2.点击send下边的那个cookie,查看现在的cookie信息(什么都没有)
3.发送请求(这个时候cookie信息已经保存在postman中的headers上了)
4. 再次点击send下边的那个cookie,查看现在的cookie信息
5.我们现在访问百度页面的其他接口(这时候headers里边已经有刚才的登录的cookie信息了)
鉴权方式
参数传递
- 创建登录接口
- 成功后在 Test 中提取 token
- 保存 token 到测试集变量
//获取响应数据的json对象
var jsonData = pm.response.json();
//从json对象中提取token值
var token = jsonData.data.token;
//把token值设置为测试集变量
pm.collectionVariables.set("token", token);
1.创建登录接口,发起登录请求
2.编写Tests,在Tests中把tocken值设置为测试集变量:再次发起请求:
3.运行结果:(查看测试集中的tocken)
4.在其他接口中使用tocken
设置鉴权
请求前脚本中获取参数(这个用来配置测试集的变量,不在像上边一样,一个请求得添加一回鉴权)
// 构造登录请求
const loginRequest = { url: 'http://litemall.hogwarts.ceshiren.com/wx/auth/login', method: "POST", header: 'Content-Type: application/json',body: { mode: 'raw',raw: JSON.stringify({'username': 'user123', "password": "user123"})}
}; // 发送请求
pm.sendRequest(loginRequest, function (err, response) {if (err) {console.log(err);} else {console.log(response.json());pm.collectionVariables.set("token", response.json().data.token);}
});
导出代码
- 点击右侧边栏的 </>
相关文章:

接口测试——接口协议抓包分析与mock_L2
目录: 抓包工具charles抓包工具fiddler抓包工具证书配置app抓包实战练习接口测试实战练习 1.抓包工具charles 工具介绍 支持 SSL 代理支持流量控制支持重发网络请求,方便后端调试支持修改网络请求参数支持网络请求的截获并动态修改可以自动将 json 或…...

Seata入门系列【1】安装seata 1.7.1+nacos 2.1.1
1 介绍 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 Github: https://github.com/seata/seata 官方文档:h…...

2023年职业院校技能大赛中职组----大数据应用与服务赛项任务书试题
2023年职业院校技能大赛中职组----大数据应用与服务赛项任务书试题 模块一:数据库系统运维(25分)任务一:数据库系统搭建(10分)任务二:房源数据库系统运维(15分) 模块二&a…...

产品经理的职业前景怎么样?一文为你全面解答!
随着科技的迅速发展和市场竞争的日益激烈,产品经理这个职业变得越来越炙手可热。产品经理负责一款产品的全生命周期管理,从需求收集到设计、开发、测试、发布,再到市场推广和用户反馈,都需要产品经理参与决策。因此,这…...

【深度学习】图像去噪(2)——常见网络学习
【深度学习】图像去噪 是在 【深度学习】计算机视觉 系列文章的基础上,再次针对深度学习(尤其是图像去噪方面)的基础知识有更深入学习和巩固。 1 DnCNN 1.1 网络结构 1.1.1 残差学习 1.1.2 Batch Normalization (BN) 1.1.2.1 背景和目标…...

八大排序详解
目录 1.排序的概念及应用 1.1 排序的概念 1.2 排序的应用 1.3 常见的排序算法 2.常见排序算法的实现 2.1 直接插入排序 2.1.1 基本思想 2.1.2 动图解析 2.1.3 排序步骤(默认升序) 2.1.4 代码实现 2.1.5 特性总结 2.2 希尔排序 2.2.1 基本思…...

自定义热加载:如何不停机实现核心代码更新
文章目录 1. 常见的几种实现代码热更新的几种方式对于开发环境我们可以使用部署环境1. 使用 Arthas 的 redefine 命令来加载新的 class 文件2. 利用 URLClassLoader 动态加载3. 通过Java的Instrumentation API 也是可以实现的 2. 实现1. ClassScanner扫描目录和加载类2. 定时任…...

Spring Cloud Alibaba Nacos 2.2.3 (2) - 单机版启动 (winodows 和 linux )
Nacos 2.2.3 (1) - 下载与数据库配置 参考下载与数据库配置 启动服务器 执行 nacos-server-2.2.3\bin 下的startup.sh或者startup.cmd (根据不同系统) windows 下nacos 单机启动 方式一: 1,打开cmd 2,cd 到nacos-s…...

VB从资源文件中播放wav音乐文件
Private Const SND_SYNC &H0 Private Const SND_MEMORY &H4 API函数 Private Declare Function sndPlaySoundFromMemory Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long 音乐效果请“单击” Pr…...

web:[HCTF 2018]WarmUp
题目 点进页面,页面只有一张滑稽脸,没有其他的提示信息 查看网页源代码,发现source.php,尝试访问一下 跳转至该页面,页面显示为一段php代码,需要进行代码审计 <?phphighlight_file(__FILE__);class emm…...

程序开发常用在线工具汇总
菜鸟工具# https://c.runoob.com/ 编码# ASCII码# https://www.habaijian.com/ 在线转换# https://www.107000.com/T-Ascii/http://www.ab126.com/goju/1711.html Base64# 在线转换# https://www.qqxiuzi.cn/bianma/base64.htmhttp://www.mxcz.net/tools/Unicode.aspx …...

crypto:丢失的MD5
题目 得到一个md5.py 运行一下,发现报错,修改一下 运行之后又报错 报错原因是算法之前编码 正确的代码为 import hashlib for i in range(32,127):for j in range(32,127):for k in range(32,127):mhashlib.md5()m.update((TASC chr(i) O3RJMV c…...

气传导和骨传导耳机哪个好?气传导耳机好用吗?气传导耳机推荐
气传导和骨传导耳机都是不入耳设计,骨传导是通过振动颅骨传达声音信号 骨传导耳机是一种能够通过振动颅骨来传达声音信号的耳机,其原理是利用骨传导技术,将声音信号通过颅骨传达到内耳,从而实现听觉效果,不过长时间佩…...

Spring 的代理开发设计
目录 编辑一、静态代理设计模式 1、为什么需要代理设计模式 2、代理设计模式 (1)概念 (2)名词解释 (3)代理开发的核心要素 (4)编码 (5)静态代理存在…...

实现注册手机号用户
1、使用Post异步发送请求(发送短信),离焦事件触发时判断 <script src"layer/layer.js"></script><!--离焦事件--><script type"text/javascript" th:inline"javascript">$("#use…...

【2023年11月第四版教材】第15章《风险管理》(第三部分)
第15章《风险管理》(第三部分) 5 过程1-规划风险管理6 过程2-识别风险6.1 识别风险★★★6.2 数据收集★★★6.3 数据分析★★★ 7 过程3-实施定性风险分析7.1 实施定性风险分析7.2 数据分析★★★7.3 数据表现★★★7.4 项目文件(更新&#…...

datart导入hive连接包
datart读取hive数据时,需要先在datart的lib目录下导入hive jdbc相关的包,这里面有几个坑记录下: 1.和springboot中commons-lang3冲突 2.hive中带的jetty和springboot冲突 3.hive jdbc的包的版本号一定要小于登录hive服务端的版本ÿ…...

2023美团秋招一面面经-已过
批处理批处理一个sql下的若干条sql,如何提高速度,如果要分片的话如何分片 1.使用数据库的批处理功能来执行多个 SQL 语句。这可以减少每个 SQL 语句的通信开销。JDBC 中的 addBatch() 和 executeBatch() 方法可以用来执行批处理操作。 在程序开始时候设…...

ARM Day2
目录 实现1-100的累加 思维导图 实现1-100的累加 .text .globl _start _start:mov r1,#0x64mov r2,#0x1mov r4,#0x1 going:cmp r1,r4bcc endleaddcs r3,r3,r4add r4,r4,r2b going endle:stop:b stop .end思维导图...

手把手教你制作独特优惠促销微传单
您是否曾经想要为自己的业务或活动制作一张吸引人的微传单?以下是一份简单易懂的微传单制作教程,帮助您在短短四步内打造出精美的宣传海报。 1. 登录乔拓云,点击【微传单】 首先,打开乔拓云网站并点击【微传单】选项。您将进入一个…...

Qt-QImage-convertTo-copy-convertToFormat-格式转换
文章目录 1.copy2.convertToFormat3.QPainter4.总结 1.copy 深度复制图像格式数据,可以指定区域。 QImage copy(const QRect &rect QRect()) const;inline QImage copy(int x, int y, int w, int h) const{ return copy(QRect(x, y, w, h)); }2.convertToForm…...

asp.net core automapper的使用
1.安装automapper的nuget包 AutoMapper.Extensions.Microsoft.DependencyInjection 2.创建需要映射的类和转换后的类 public class studto{public int sn { get; set; }public string name { get; set; }public string sex { get; set; }public int age { get; set; }public s…...

自学WEB后端03-Node.js 语法
学习后端路线: JavaScript 基础语法 Node,js 内置 API 模块 (fs、 path、 http等) 第三方 API 模块 (express、mysql等) 今天主要回顾下Node.js 语法 Node.js 是基于 Chrome V8 引擎的 JavaScript 运行环境,它提供了一种能够在服务器端运行 JavaScr…...

对象数组合并和去重
数组去重: 普通字符串/数字数组去重: 1. 利用Set的特性 > new Set(arr) 2. for遍历, indexOf判断是否存在 3. 利用对象去重, 因为对象的key有唯一性 数组合并: 可以使用克隆(克隆, 深克隆的那些方法) 对象数组去重: for循环, find或者findIndex判断是否存在, 然后不存…...

【AI语言模型】阿里推出音视频转文字引擎
一、前言 阿里的音视频转文字引擎可以正式使用,用户可体验所有AI功能,含全文概要、章节速览、发言总结等高阶AI功能。通过阿里云主账号登录,可享受以下权益: 每日登录,自动获得2小时转写时长; 每邀请1名好…...

YOLOv5改进D-LKA:在D-LKA结构的基础上进行多种改进结构,同时拥有Attention和大卷积核的能力,高效改进
💡本篇内容:YOLOv5改进D-LKA:在D-LKA结构的基础上进行多种改进结构,同时拥有Attention和大卷积核的能力,高效改进 💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv5 按步骤操作运行改进后的代码即可 💡本文提出改进 原创 方式:二次创新,YOLOv5专属 论文理论部…...

Java项目-Spring Boot的生鲜网上交易系统
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2 技术栈3 系统功能4 功能设计5系统详细设计5.1系统功能模块5.2后台功能模块5\.2\.1用户功…...

MySQL - group by分组查询 (查询操作 三)
功能介绍 group by: 对数据进行分组和聚合操作(可以操作单字段和多字段) having:过滤group by的结果,也就是在分组后添加筛选条件 基础语法 select 字段列表 from 表名 [ where 条件 ] group by 分组字段名 [ having ]; where 和 having的区…...

96.qt qml-http之XMLHttpRequest介绍详解使用
在QML中我们可以通过XMLHttpRequest 来实现http/https访问网络接口,接下来我们先来学习XMLHttpRequest类的常用部分、 由于QML的XMLHttpRequest少部分参数是没有的,所以本章来单独讲解下。下章我们来实现旋转请求按钮以及通用的JSON请求模板方法 1.XMLHttpRequest初步使用 …...

代码随想录算法训练营第五十天 | 123.买卖股票的最佳时机III 188. 买卖股票的最佳时机 IV
1. 买卖股票的最佳时机 III 123. 买卖股票的最佳时机 III - 力扣(LeetCode) * 定义 5 种状态: * 0: 没有操作, 1: 第一次买入, 2: 第一次卖出, 3: 第二次买入, 4: 第二次卖出 class Solution {public int maxProfit(int[] prices) {int length prices.l…...