如何在自动化测试中使用MitmProxy获取数据返回?
背景介绍
当我们在接口或UI自动化项目中,常常会出现这种现象——明明是正常请求,却无法获取到想要的数据返回。
比如:
场景A:页面是动态数据,第一次进入页面获取到的数据,和下次进入页面获取到的数据完全不一样。
场景B:页面数据有展示限制,页面某些模块或整个页面数据仅展示3次,且通过服务端返回控制。
这时我们要怎么办?
如果是手工测试时,我们大可以直接使用Charles、Fiddler进行模拟,毕竟代理软件基本能解决大部分测试需求。
那如果是在自动化项目中呢?如果还是使用代理软件——其实也不是完全不行,但我们还有更佳的实践方式。
也就是使用MitmProxy作为正向代理拦截请求和返回数据。
如何使用MitmProxy作为正向代理
实现Maplocal
MitmProxy是一个三方库,我们在程序中可以把它当成Charles来使用。
这里以实现Maplocal功能进行说明:
(1)Maplocal功能,简单理解就是当针对特定请求,返回特定数据。
比如请求"www.baidu.com",正常应该返回:
{"post": {"title": "百度一下",},"type": 1
}
但我们修改返回数据,只要有"www.baidu.com"请求过来,就让它自动返回:
{"post": {"title": "谷歌一下啦啦啦",},"type": 1
}
这就是一个最基础的maplocal案例。
(2)在MitmProxy里如何实现Maplocal功能呢?
这里以get请求实现进行说明:
get.json 配置文件,在这里记录所有需要拦截的get请求:
{"https:www.baidu.com":[{"jsonPath":"../data/maplocal/first_tab.json"}]
}
MitmProxy脚本中:
from mitmproxy import http
from mitmproxy import ctxclass InterceptRequests:def __init__(self):def request(self, flow: http.HTTPFlow) -> None:"""使用request事件实现map local:param flow::return:"""# GET 请求处理if method == "GET":pure_url = get_url_host(interceptUrl)url_data = get_json.get(pure_url)if url_data:interce_params = get_url_params(interceptUrl)params = get_json_value(get_path, pure_url)for para in params:if para.items() <= interce_params.items():jsonpath = para.get("jsonPath")jsonpath_abs = path(jsonpath)self.file_maplocal(flow, jsonpath_abs)
addons = [InterceptRequests()
]
在执行的脚本中(如本地shell 或 其他执行的py脚本里):
# kill mitmproxy
lsof -n -i:8999 | grep LISTEN | awk '{print $2}' | xargs kill
# start mitmproxy
mitmdump -p 8999 -s mitmHandler.py
启动脚本后,连接MitmProxy的设备的请求全部都会被脚本监控。
如果出现"www.baidu.com"的请求,就会到get.json里找到对应的json,自动返回给设备。
这样,就实现了一个最简单的maplocal。
当然基于目前的MitmProxy脚本,我们还可以进行一些功能扩展。
如针对接口类型get或post请求,针对请求参数类型json或x-www-form-urlencoded,都可以进行更多延伸扩展。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你
相关文章:

如何在自动化测试中使用MitmProxy获取数据返回?
背景介绍 当我们在接口或UI自动化项目中,常常会出现这种现象——明明是正常请求,却无法获取到想要的数据返回。 比如: 场景A:页面是动态数据,第一次进入页面获取到的数据,和下次进入页面获取到的数据完全…...

达之云BI平台助力中国融通集团陕西军民服务社有限公司实现数字化运营
中国融通集团陕西军民服务社是一家大型综合类零售购物中心,公司目前管理系统运行了10年左右,面临系统新零售支持发展严重滞后,行业主流应用落地困难,如线上业务、到家业务、全渠道营销、电子发票、自助收银、扫码购、无感停车、未…...

Private market:借助ZK实现的任意计算的trustless交易
1. 引言 Private market,借助zk-SNARKs和以太坊来 隐私且trustlessly selling: 1)以太坊地址的私钥(ECDSA keypair)2)EdDSA签名3)Groth16 proof:借助递归性来匿名交易Groth16 proo…...

反序列化漏洞复现(typecho)
文章目录 执行phpinfogetshell 执行phpinfo 将下面这段代码复制到一个php文件,命名为typecho_1.0-14.10.10_unserialize_phpinfo.php,代码中定义的类名与typecho中的类相同,是它能识别的类: <?php class Typecho_Feed{const…...

QT设计一个小闹钟
设置一个闹钟,左侧窗口显示当前时间,右侧设置时间,以及控制闹钟的开关,下方显示闹钟响时的提示语。当按启动按钮时,设置时间与闹钟提示语均不可再改变。当点击停止时,关闭闹钟并重新启用设置时间与闹钟提示…...

MybatisPlus(3)
前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 一、查询投影🍭 查询投影是指在查询操作中,只选择…...
安全计算环境技术测评要求项
1.身份鉴别-在应用系统及各类型设备中确认操作者身份的过程(身份鉴别和数据保密) 1-2/2-3/3-4/4-4 a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换 b)应具有…...
Excel快捷键表
工作表插入新工作表ShiftF11或AltShiftF1移动到工作簿中的下一张工作表CtrlPageDown移动到工作簿中的上一张工作表CtrlPageUp选定当前工作表和下一张工作表ShiftCtrlPageDown取消选定多张工作表Ctrl PageDown选定其他的工作表CtrlPageUp选定当前工作表和上一张工作表ShiftCtrlP…...

Windows Server 系统各版本及授权说明(附下载地址
本文为Windows Server系统各版本差异对比及授权说明。 会对相关目前仍主流使用的相关Windows Server系统版本和相关授权进行对比和功能说明。 WindowsServer2012 R2 Windows Server 2012 R2授权方式是按照物理CPU数量进行授权,比如物理服务器CPU插槽数量2ÿ…...

【智慧工地源码】物联网和传感器技术在智慧工地的应用
物联网(IoT)和传感器技术在智慧工地中扮演着至关重要的角色。这些技术的应用,使得智慧工地能够实现对施工过程的精确监控、数据收集和分析,以及设备互联,从而提高工程效率、减少成本并改善工人的工作环境。 一、物联网…...
计算机安全学习笔记(IV):基于角色的访问控制 - RBAC
RBAC(Role-Based Access Control)基于用户在系统中设定的角色而不是用户的身份。一般来说,RBAC模型定义角色为组织中的一项工作职责,RBAC系统给角色而不是给单独的用户分配访问权。用户根据他们的职责被静态地或动态地分配给不同的角色。 RBAC模型间的关…...
MFC中的Button修改颜色的方法
添加工具箱下面的MFC Button Control控件(不使用普通的Button控件);给按键添加变量:m_MFCButton1,变量类型(默认)为:CMFCButton;testDlg.cpp中初始化中添加如下代码&…...

【算法】选择排序
选择排序 选择排序代码实现代码优化 排序: 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录&…...
golang之context实用记录
简言 WithCancel()函数接受一个 Context 并返回其子Context和取消函数cancel 新创建协程中传入子Context做参数,且需监控子Context的Done通道,若收到消息,则退出 需要新协程结束时,在外面调用 cancel 函数,即会往子C…...

音视频FFmpeg简单理解学习,必学技术
FFmpeg是一个开源的多媒体框架,它包含了一个用于音频和视频编解码的库。它可以执行各种多媒体操作,如格式转换、视频剪辑、音频处理等。可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。 FFmpeg的结构 默认的编译会生成…...

一款内网信息收集利用工具
FuckDomainMini 简介 这是一款基于java开发Windows的内网信息收集、利用工具 可以节省您的信息收集所花费的,又或者是做免杀所花费的时间 现在这个版本是先行版本,目前先行版只有一个功能,更多的功能还在调试与开发中。 尽情期待&#x…...

数据库表的操作
目录 一、表的创建 1、创建语法 2、创建案例 二、查看表结构 三、修改表 1、修改表名 2、添加记录 3、修改列属性 4、添加列(字段) 5、删除列(字段) 6、修改列名字 四、删除表 五、修改表结构的风险 1、风险 2、建议 一、表的创建…...
Golang开发--channel的使用
在 Go 语言中,channel(通道)是一种用于在 goroutine 之间进行通信和同步的并发原语。它提供了一种安全且简单的方式来传递数据。 通道的详细描述和使用方法 1.定义通道: 通道是通过使用 make 函数来创建的。通道有特定的类型&am…...

SQL sever中表管理
目录 一、创建表: 1.1语法格式: 1.2示例: 二、修改表: 2.1语法格式: 2.2示例: 三、删除表: 3.1语法格式: 3.2示例: 四、查询表: 4.1语法格式&…...
CSSoverflow 属性
overflow 属性用于设置当元素中的内容溢出后的情况。 值得注意的是: 所谓溢出,是指子元素的大小(包括文本、元素或图片等)超出父元素的区域,会有一部分内容显示在父元素所在的区域外。 属性值描述visible默认值。内容不会被修剪&a…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...