AI 调用 JMeter 自动化压测
传统的性能测试工具链是出了名的重。
尤其是 Apache JMeter,每次为了测一个接口,先得打开启动奇慢的 Java Swing GUI 界面,手动去建线程组、HTTP 请求、添加 HTTP 信息头管理器、Cookie 管理器、配置察看结果树和聚合报告。改一个参数就要一层层展开树形目录去改,哪怕是在命令行用非 GUI 模式跑,生成出来的要么是几百兆的原始 JTL,要么是生成一个包含成百上千个 HTML/JS/CSS 静态文件的笨重报告目录。
现在大模型能力这么强,我们能不能直接跟 AI 说:“帮我对这个接口压测 50 QPS,持续 30 秒,看看响应时间分布和瓶颈在哪里”?
以前很难,因为:
- AI 调不动 JMeter:没有统一的标准化通信接口。
- AI 看不懂压测报告:JMeter 原生的 HTML Dashboard 文件结构太复杂、体积太大,AI 根本没办法全文检索或直接阅读。
- 容易挂死:一旦目标站点出现极端网络超时、SSL 握手挂起,JMeter 默认无限等待超时,容易把压测进程和测试环境直接拖垮,而且缺少急停手段。
为了彻底打通 AI 与性能测试的壁垒,这里深度重构并开源了 jmeter-mcp-server,基于 Model Context Protocol(模型上下文协议,简称 MCP)将 Apache JMeter 全面改造为 AI 原生的性能测试服务。
开源仓库地址:
- GitHub: https://github.com/NowPion/jmeter-mcp-server
- Gitee: https://gitee.com/niezidong/jmeter-mcp-server
项目致谢:本项目基于 NaveenKumar Namachivayam (QAInsights) 开源的 jmeter-mcp-server 进行了架构重构、生产级加固与特性扩展。
核心能力与升级亮点
1. 动态 JMX 计划生成(免 GUI、全自动组装)
完全告别手动点开 JMeter 界面配置 JMX 的繁琐流程。系统内置了动态 JMX 构造器,只需传入基础参数,即可全自动生成标准的 JMX XML:
- 连接与响应超时保护:内置
connect_timeout(默认 5000ms) 与response_timeout(默认 10000ms),从根本上规避目标服务卡死导致的压测线程无限挂起。 - 智能请求头补齐:传入合法 JSON 请求体时,自动补充
Content-Type: application/json,无需人工额外声明。 - 目标 TPS/QPS 控速:内置
ConstantThroughputTimer(恒定吞吐量定时器),支持按指定的每秒吞吐量精准施压。 - 会话保持与断言:默认挂载
CookieManager维持会话,并支持自动注入 HTTP 状态码校验与文本断言。
2. 全流程 Markdown 报告化与 ASCII 耗时直方图
彻底移除原生 JMeter 臃肿冗余的 HTML Dashboard 输出,转为输出结构严密的单文件 .md 报告:
- 指标全覆盖:自动提取样本量、错误率、吞吐量(TPS)、平均耗时、Median、P90、P95、P99 及极值。
- 纯文本 ASCII 直方图:在 Markdown 报告中直接呈现条形分布图,无需加载图片或 JS 渲染库,AI 可直接语义解析,人类开发者在任何 Markdown 预览器中也能秒级获取耗时特征。
- 接口明细与瓶颈诊断:包含慢接口列表、高错误率排查、离群耗时突变(Anomaly)检测以及并发退化拐点评估。
3. 一键极速压测与压测急停(Kill Switch)
- 提供
quick_http_test工具:AI 只需一句指令,一步完成「动态生成测试脚本 -> 执行压测 -> 分析结果 -> 输出 Markdown 报告」。 - 提供
stop_running_test工具:压测失控或目标服务被打垮时,一键发送终止信号,通过 JMeter 官方优雅停止与安全进程回收机制中止测试。
4. 架构瘦身与 STDIO 管道保护
- 服务解耦:将原先臃肿混杂的几百行字符串拼接逻辑剥离为
analyzer/formatter.py与engine.render_visualization,核心服务代码行数缩减近 40%,职责更加纯粹。 - 消除协议破坏隐患:彻底排查并清理了所有解析层的
print()语句,统一收敛为 Logger,避免任何脏数据污染 FastMCP 的 JSON-RPC 标准输入输出管道。 - Windows 路径与引号安全:绕过 Windows
cmd.exe执行jmeter.bat时路径包含空格产生的引号解析 Bug,改为优先调用 Java 直接运行ApacheJMeter.jar,杜绝任何路径兼容性错误。 - 严密测试:全量 59 项自动化单元测试 100% 全部通过。
快速配置与接入使用
准备工作
确保本地已安装:
- Python 3.10+
- Java (JDK 8+)
- Apache JMeter 5.5+(推荐 5.6.3)
接入方式一:使用 uvx 在线运行(免下载源码,最推荐)
不需要在本地 git clone 下载或维护任何源码文件夹。只要安装了 uv,直接在你的 MCP 客户端配置(如 Claude Desktop 的 claude_desktop_config.json 或 IDE 的 mcp_config.json)中填入:
1 | |
接入方式二:本地克隆源码运行
如果需要二次开发或自定义功能:
1 | |
客户端配置直接指向 jmeter_server.py:
1 | |
提供的核心 MCP 工具清单
| 工具名称 | 功能描述 | 关键参数 |
|---|---|---|
quick_http_test |
一步完成压测与出具报告 | url, method, threads, duration, target_tps, assert_status |
create_http_test_plan |
动态生成定制化 JMX 文件 | url, headers, body, connect_timeout, response_timeout |
execute_jmeter_test_non_gui |
执行已有的 JMX 测试计划 | test_file, properties, generate_report, log_file |
stop_running_test |
紧急叫停正在运行的测试任务 | 无 |
analyze_jmeter_results |
深度分析 JTL 文件指标明细 | jtl_file, detailed |
identify_performance_bottlenecks |
专门定位性能瓶颈与异常点 | jtl_file |
get_performance_insights |
获取调优措施与容量建议 | jtl_file |
generate_visualization |
生成 Markdown 报告或图表 | jtl_file, visualization_type (默认 md_report) |
实际使用场景与效果演示
配置好 MCP 之后,日常开发中就可以直接在 AI 对话框中进行压测互动:
场景 1:一键对接口发起梯度压测
你:“帮我对
https://api.example.com/api/v1/orders做一次压测,并发 10 个线程,持续 15 秒,限制 30 TPS,并校验状态码必须为 200,输出分析报告。”
AI 会自动调用 quick_http_test 工具,生成测试计划并完成压测,直接把生成的 Markdown 报告呈现在对话流中:
1 | |
场景 2:让 AI 自动化分析瓶颈与调优建议
你:“分析刚才产生的
results/orders_results.jtl文件,看看系统性能是否存在隐患。”
AI 会调用 identify_performance_bottlenecks 和 get_performance_insights,主动解析出离群毛刺时间点与并发退化趋势:
- 自动提示接口耗时突增的异常时刻(如 GC 或锁竞争);
- 计算线程数增长与响应耗时的相关系数,告知系统是否达到性能饱和;
- 提供按 High/Medium 划分的针对性调优策略。
场景 3:异常情况下的急停
你:“目标服务开始报错 502 了,立刻停掉当前测试!”
AI 立即调度 stop_running_test,安全截断测试进程并写出已采集到的采样数据。
结语
在 AI 辅助研发的今天,性能测试不应该再停留在手工写脚本、看几万行日志、在笨拙 GUI 里点来点去的原始阶段。
通过将 JMeter 原生底层与 MCP 协议打通,我们赋予了大模型直接调度压测引擎的能力,实现了需求对话 -> 自动组装 JMX -> 真实执行 -> 纯净 Markdown 诊断报告 -> AI 自行阅读报告并提出代码层优化建议的完整闭环。
欢迎体验与交流!