告别抓包烦恼:用Selenium+mitmproxy实现自动化测试流量监控的保姆级教程

张开发
2026/4/20 14:06:26 15 分钟阅读

分享文章

告别抓包烦恼:用Selenium+mitmproxy实现自动化测试流量监控的保姆级教程
告别抓包烦恼用Seleniummitmproxy实现自动化测试流量监控的保姆级教程在Web自动化测试中最令人头疼的莫过于页面加载成功但数据未显示的玄学问题。传统解决方案往往需要反复查看日志、数据库或后端接口效率低下且难以定位问题根源。本文将介绍如何通过Selenium与mitmproxy的黄金组合构建一套实时流量监控系统让测试过程中的每个网络请求都无所遁形。1. 环境准备与基础配置1.1 工具链选择理由Selenium业界标准的Web自动化测试框架支持多种浏览器驱动mitmproxy基于Python的中间人代理工具相比Fiddler等工具具有完整的Python API支持实时请求/响应修改能力无GUI的轻量级操作模式与Python生态无缝集成安装只需一行命令pip install selenium mitmproxy1.2 证书配置关键步骤启动mitmproxy监听端口mitmweb --listen-port 8080在Selenium中配置代理from selenium import webdriver options webdriver.ChromeOptions() options.add_argument(--proxy-server127.0.0.1:8080) driver webdriver.Chrome(optionsoptions)访问http://mitm.it安装CA证书注意不同操作系统证书安装方式略有差异MacOS需将证书拖入钥匙串并设置为始终信任2. 流量监控实战技巧2.1 基础流量捕获创建capture_flow.py脚本from mitmproxy import http def request(flow: http.HTTPFlow) - None: print(f请求URL: {flow.request.url}) print(f请求头: {flow.request.headers}) def response(flow: http.HTTPFlow) - None: print(f响应状态: {flow.response.status_code}) print(f响应内容: {flow.response.text[:200]}...) # 截取部分内容启动命令mitmdump -s capture_flow.py2.2 高级过滤技术针对特定API的监控方案过滤类型示例代码适用场景域名过滤if api.example.com in flow.request.url监控特定后端服务路径过滤if flow.request.path.startswith(/v1/login)重点监控登录流程方法过滤if flow.request.method POST只关注数据提交请求状态过滤if flow.response.status_code 500捕获服务端错误3. 动态请求干预实战3.1 修改请求参数def request(flow: http.HTTPFlow): if search in flow.request.path: # 修改查询参数 flow.request.query[limit] 20 # 添加认证头 flow.request.headers[Authorization] Bearer test_token3.2 模拟异常响应def response(flow: http.HTTPFlow): if checkout in flow.request.path: # 修改响应状态码 flow.response.status_code 503 # 替换响应内容 flow.response.text {error: service_unavailable}4. 测试数据自动验证4.1 关键数据断言def response(flow: http.HTTPFlow): if user/profile in flow.request.path: import json profile json.loads(flow.response.text) assert profile[userType] premium, 用户类型验证失败4.2 性能指标监控timings [] def response(flow: http.HTTPFlow): if flow.request.method GET: timings.append(flow.response.timestamp_end - flow.request.timestamp_start) def done(): avg_latency sum(timings)/len(timings) print(f平均响应时间: {avg_latency:.2f}s) assert avg_latency 1.0, 性能不达标5. 企业级应用方案5.1 分布式测试架构测试节点A → mitmproxy → 被测系统 测试节点B → mitmproxy → 被测系统 ↓ 中央分析服务(ELK/Grafana)5.2 典型工作流配置启动mitmproxy录制模式执行Selenium测试套件自动分析流量数据接口成功率统计数据一致性检查性能基准对比生成可视化报告# 示例报告生成代码 def generate_report(flows): stats { total_requests: len(flows), failed_requests: sum(1 for f in flows if f.response.status_code 400) } # 此处可接入Matplotlib或Pygal生成图表在实际项目中这套方案帮助我们减少了约70%的接口相关问题排查时间。特别是在处理第三方支付回调等异步流程时能够完整记录整个交互过程极大提升了测试覆盖率。

更多文章