mitmproxy 是一个强大的中间人代理工具,可以捕获 HTTP/HTTPS 流量。结合 mitmproxy 和 JMeter,你可以轻松地将捕获的流量转换为 JMX 测试计划。以下是详细步骤:
方法一:mitmproxy → HAR → JMX
1. 使用 mitmproxy 捕获流量并生成 HAR 文件
# 启动 mitmproxy 并记录到 HAR 文件
mitmproxy -w output.har
或者使用 mitmdump(非交互式版本):
mitmdump -w output.har
2. 将 HAR 转换为 JMX
使用 JMeter 内置转换器:
-
打开 JMeter
-
选择
File
>Import
>Open HAR File
-
选择生成的
output.har
文件
或者使用 BlazeMeter 在线转换器:
https://converter.blazemeter.com/
方法二:使用 mitmproxy2jmeter 脚本
这是一个专门将 mitmproxy 流量转换为 JMX 的工具:
-
安装 mitmproxy2jmeter:
pip install mitmproxy2jmeter
-
运行转换:
mitmproxy2jmeter -i input.mitm -o output.jmx
方法三:自定义 mitmproxy 脚本直接生成 JMX
创建 Python 脚本(如 mitm_to_jmx.py
):
from mitmproxy import http
from xml.etree.ElementTree import Element, SubElement, tostring
from xml.dom import minidom
import datetimeclass JMeterExporter:def __init__(self):self.testplan = Element('TestPlan', guiclass="TestPlanGui", testclass="TestPlan", testname="Test Plan", enabled="true")hash_tree = SubElement(self.testplan, 'hashTree')thread_group = SubElement(hash_tree, 'ThreadGroup', {'guiclass': 'ThreadGroupGui','testclass': 'ThreadGroup','testname': 'Thread Group','enabled': 'true'})# 添加线程组配置...self.hash_tree = SubElement(hash_tree, 'hashTree')def add_request(self, flow: http.HTTPFlow):http_sampler = SubElement(self.hash_tree, 'HTTPSamplerProxy', {'guiclass': 'HttpTestSampleGui','testclass': 'HTTPSamplerProxy','testname': flow.request.url,'enabled': 'true'})# 配置请求方法、路径、参数等...def save(self, filename):xml_str = tostring(self.testplan, 'utf-8')pretty_xml = minidom.parseString(xml_str).toprettyxml(indent=" ")with open(filename, 'w') as f:f.write(pretty_xml)exporter = JMeterExporter()def request(flow: http.HTTPFlow):exporter.add_request(flow)def done():exporter.save('output.jmx')# 使用: mitmproxy -s mitm_to_jmx.py
配置 mitmproxy 捕获 HTTPS 流量
-
安装 mitmproxy CA 证书:
mitmproxy --set ssl_insecure=true
-
在客户端设备上安装证书(手机/电脑)
最佳实践建议
-
过滤不需要的请求:
def request(flow: http.HTTPFlow):if "google-analytics.com" in flow.request.host:returnexporter.add_request(flow)
-
参数化动态值:
-
在生成的 JMX 中替换 session IDs、tokens 等为 JMeter 变量
-
-
添加增强元件:
-
在 JMeter 中手动添加:
-
定时器(Think Time)
-
断言
-
监听器
-
-
-
处理重复请求:
-
在脚本中合并相同 URL 的请求或使用 JMeter 的 "Merge Results" 功能
-
常见问题解决
-
HTTPS 证书问题:
-
确保客户端信任 mitmproxy 的 CA 证书
-
使用
--set ssl_insecure=true
忽略证书错误
-
-
乱码问题:
-
在 JMeter 的 HTTP 请求中设置正确的编码(如 UTF-8)
-
-
缺失请求体:
-
确保 mitmproxy 配置了
-b
选项以捕获请求体
-
通过以上方法,你可以高效地将 mitmproxy 捕获的实际用户流量转换为 JMeter 测试计划,实现更真实的性能测试场景。