背景介绍
当我们在接口或UI自动化项目中,常常会出现这种现象——明明是正常请求,却无法获取到想要的数据返回。
比如:
场景A:页面是动态数据,第一次进入页面获取到的数据,和下次进入页面获取到的数据完全不一样。
场景B:页面数据有展示限制,页面某些模块或整个页面数据仅展示3次,且通过服务端返回控制。
这时我们要怎么办?如果是手工测试时,我们大可以直接使用Charles、Fiddler进行模拟,毕竟代理软件基本能解决大部分测试需求。
那如果是在自动化项目中呢?如果还是使用代理软件——其实也不是完全不行,但我们还有更佳的实践方式。
也就是使用MitmProxy作为正向代理拦截请求和返回数据。
如何使用MitmProxy作为正向代理 实现MaplocalMitmProxy是一个三方库,我们在程序中可以把它当成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 ctx
class 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()
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?