通过 mitmproxy 生成 JMeter JMX 文件

news/2025/3/31 3:58:22/文章来源:https://www.cnblogs.com/zgq123456/p/18797191

mitmproxy 是一个强大的中间人代理工具,可以捕获 HTTP/HTTPS 流量。结合 mitmproxy 和 JMeter,你可以轻松地将捕获的流量转换为 JMX 测试计划。以下是详细步骤:

方法一:mitmproxy → HAR → JMX

1. 使用 mitmproxy 捕获流量并生成 HAR 文件

bash
复制
# 启动 mitmproxy 并记录到 HAR 文件
mitmproxy -w output.har

或者使用 mitmdump(非交互式版本):

bash
复制
mitmdump -w output.har

2. 将 HAR 转换为 JMX

使用 JMeter 内置转换器:

  • 打开 JMeter

  • 选择 File > Import > Open HAR File

  • 选择生成的 output.har 文件

或者使用 BlazeMeter 在线转换器:
https://converter.blazemeter.com/

方法二:使用 mitmproxy2jmeter 脚本

这是一个专门将 mitmproxy 流量转换为 JMX 的工具:

  1. 安装 mitmproxy2jmeter:

bash
复制
pip install mitmproxy2jmeter
  1. 运行转换:

bash
复制
mitmproxy2jmeter -i input.mitm -o output.jmx

方法三:自定义 mitmproxy 脚本直接生成 JMX

创建 Python 脚本(如 mitm_to_jmx.py):

python
复制
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 流量

  1. 安装 mitmproxy CA 证书:

bash
复制
mitmproxy --set ssl_insecure=true
  1. 在客户端设备上安装证书(手机/电脑)

最佳实践建议

  1. 过滤不需要的请求

    python
    复制
    def request(flow: http.HTTPFlow):if "google-analytics.com" in flow.request.host:returnexporter.add_request(flow)
  2. 参数化动态值

    • 在生成的 JMX 中替换 session IDs、tokens 等为 JMeter 变量

  3. 添加增强元件

    • 在 JMeter 中手动添加:

      • 定时器(Think Time)

      • 断言

      • 监听器

  4. 处理重复请求

    • 在脚本中合并相同 URL 的请求或使用 JMeter 的 "Merge Results" 功能

常见问题解决

  1. HTTPS 证书问题

    • 确保客户端信任 mitmproxy 的 CA 证书

    • 使用 --set ssl_insecure=true 忽略证书错误

  2. 乱码问题

    • 在 JMeter 的 HTTP 请求中设置正确的编码(如 UTF-8)

  3. 缺失请求体

    • 确保 mitmproxy 配置了 -b 选项以捕获请求体

通过以上方法,你可以高效地将 mitmproxy 捕获的实际用户流量转换为 JMeter 测试计划,实现更真实的性能测试场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/906936.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go红队开发—CLI框架(二)

Go红队开发—CLI命令行工具编写基础学习(二)。目录CLI开发框架cobra 集成库目录规范搭建框架根命令参数添加子命令帮助信息爬虫功能(趁热打铁)Goquery处理响应编码处理收集百度热搜榜爬虫功能所有源码 CLI开发框架 师傅们久等了,为了加快进度,这章节添加了一个爬虫功能,也是…

APP性能测试工具-GT

GT(随身调)是腾讯研发的一款可以用来做App性能测试的工具,可以对APP进行快速的性能测试,检测App的CPU、内存、流量、电量、帧率/流畅度等等、还能开启日志的查看、Crash日志查看、网络数据包的抓取、APP内部参数的调试、真机代码耗时统计等。 虽然现在该项目已经停止维护了…

一文速通Python并行计算:04 Python多线程编程-多线程同步(上)—基于条件变量、事件和屏障

本文介绍了Python多线程同步的三种机制:条件变量(Condition)、事件(Event)和屏障(Barrier),条件变量指的是线程等待特定条件满足后执行,适用于生产者-消费者模型;Event指的是线程通过事件标志进行同步,适用于线程间简单通信;Barrier指的是多个线程需同步到同一阶段…

docker desktop windows安装

我的机器windows 11 家庭版 下载docker desktop for windows 就直接安装了。安装后打开,遇到了界面转圈圈加载不出来问题,docker engine也是stopped. 病急乱投医,先是说要启用hyper-v,控制面板=》程序和功能里没有发现有hyper-v,一看是家庭版,网上倒是有一个脚本可以在家…

C语言打卡学习第6天(2025.3.25)(补发)

只做了一些有关循环分支函数求值的题,感觉循环函数其实差不多,只有一些细微差别,可能是做的题还不够多或者看运用场景吧

C语言打卡学习第5天(2025.3.24)(补发)

1、把char,getchar,putchar简单看了一下,求ascii值之类的 之类的简单看了一下 2、交换值那一题很奇怪,结果我输出的跟答案要求是一样的,交过去之后显示答案错误,白天的时候问一下

Vulnstack红日靶场通关(持续更新)

带你速通内网渗透相关知识点!!!Vulnstack通关 来源于《内网渗透实战攻略》实战部分 个人是写下自己的笔记 攻击链:探索发现阶段->入侵和感染阶段->攻击和利用阶段->探索感知阶段->传播阶段->持久化和恢复阶段 Windows权限级别前置知识:权限层级 账户类型 权…

Ubuntu 24.04安装MySQL,并且配置外网访问

安装启动更新软件包列表sudo apt update安装MySQL软件包sudo apt install mysql-server启动MySQL服务sudo systemctl start mysql重启命令:systemctl restart mysql配置外网访问 需要修改一个配置 vim /etc/mysql/mysql.conf.d/mysqld.cnf注释掉 这行 配置 bind-address …

2022CCPC Online Contest G - Name the Puppy

对正串和反串分别建立 Trie 树,定义 \(dp[i][j]\) 表示正串 Trie 树上编号为 \(i\) 的点匹配反串 Trie 树上编号为 \(j\) 的点所能拼出最长 anti-border 的长度。 如此,从根节点开始搜索,直到无法匹配为止都可以搜,搜到底后回到根节点继续匹配,可以证明,拼出来的 anti-bo…

互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp智能体框架开发语音交互

前言 前段时间太忙了博客一直都没来得及更新,但是不代表我已经停止开发了,刚好最近把语音部分给调整了一下,所以就来分享一下具体的内容了。我想说一下,更新晚还是有好处的,社区已经有很多的小伙伴自己实现了一些语音对话功能的案例,比如小智也有.NET客户端了,还有就是一…

【AI News | 20250327】每日AI进展

AI Repos 1、playwright-mcp 使用Playwright提供浏览器自动化功能的MCP服务,核心是让LLM通过结构化的可访问性快照与网页交互,不需要依赖截图或视觉模型。可以用来自动填写网页表单、自动收集网页信息、自动进行网页测试等。支持两种模式:快照模式(默认):使用可访问性快照…

markdown常用命令行格式

Markdown 主要命令(语法)如下:标题 使用 # 号表示标题,# 的个数决定标题的级别:一级标题 二级标题 三级标题 四级标题 五级标题 六级标题段落 & 换行 直接输入文字形成段落,使用两个以上空格或 进行换行:这是一个段落。 这是同一段的下一行。 使用 <br> 也可…