成都企业网站开发公司,建e室内设计网玄关,老五wordpress,wordpress密码保护背景介绍
当我们在接口或UI自动化项目中#xff0c;常常会出现这种现象——明明是正常请求#xff0c;却无法获取到想要的数据返回。
比如#xff1a;
场景A#xff1a;页面是动态数据#xff0c;第一次进入页面获取到的数据#xff0c;和下次进入页面获取到的数据完全…
背景介绍
当我们在接口或UI自动化项目中常常会出现这种现象——明明是正常请求却无法获取到想要的数据返回。
比如
场景A页面是动态数据第一次进入页面获取到的数据和下次进入页面获取到的数据完全不一样。
场景B页面数据有展示限制页面某些模块或整个页面数据仅展示3次且通过服务端返回控制。
这时我们要怎么办
如果是手工测试时我们大可以直接使用Charles、Fiddler进行模拟毕竟代理软件基本能解决大部分测试需求。
那如果是在自动化项目中呢如果还是使用代理软件——其实也不是完全不行但我们还有更佳的实践方式。
也就是使用MitmProxy作为正向代理拦截请求和返回数据。
如何使用MitmProxy作为正向代理
实现Maplocal
MitmProxy是一个三方库我们在程序中可以把它当成Charles来使用。
这里以实现Maplocal功能进行说明
1Maplocal功能简单理解就是当针对特定请求返回特定数据。
比如请求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都可以进行更多延伸扩展。
总结
感谢每一个认真阅读我文章的人
作为一位过来人也是希望大家少走一些弯路如果你不想再体验一次学习时找不到资料没人解答问题坚持几天便放弃的感受的话在这里我给大家分享一些自动化测试的学习资源希望能给你前进的路上带来帮助。 文档获取方式
加入我的软件测试交流群632880530免费获取~同行大佬一起学术交流每晚都有大佬直播分享技术知识点
这份文档对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你 以上均可以分享只需要你搜索vx公众号程序员雨果即可免费领取