news 2026/5/15 14:45:09

第十四篇:《JMeter插件扩展:自定义函数与第三方插件》

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第十四篇:《JMeter插件扩展:自定义函数与第三方插件》

虽然 JMeter 本身功能强大,但在实际工作中,总有一些特定场景需要额外扩展:比如生成复杂的业务数据、实时监控服务器资源、实现更精细的负载模型等。JMeter 支持两种扩展方式:安装第三方插件和自定义开发。本文将介绍如何使用 Plugins Manager 安装常用插件,以及如何通过 Java 开发自定义函数和取样器。

一、JMeter 插件生态概览

JMeter 官方提供了核心功能,而大量高级特性由 JMeter Plugins 项目(https://jmeter-plugins.org)提供。

二、安装 JMeter Plugins Manager

2.1 下载安装
从 https://jmeter-plugins.org/install/Install/ 下载 jmeter-plugins-manager-*.jar

将 JAR 文件复制到 $JMETER_HOME/lib/ext 目录下

重启 JMeter

2.2 使用插件管理器
点击菜单栏 Options → Plugins Manager。Plugins Manager 包含三大标签页:

Installed Plugins:已安装的插件

Available Plugins:可用插件列表,勾选即可安装

Upgrades:已安装插件的更新

三、常用第三方插件详解

3.1 Custom Thread Groups(自定义线程组)
用于实现阶梯式加压和复杂负载模型,比默认线程组更适合负载测试。

安装:在 Available Plugins 中搜索 “Custom Thread Groups” 并安装。

安装后,添加线程组时会多出以下选项:

Stepping Thread Group:阶梯式增加/减少线程

Concurrency Thread Group:按目标并发/吞吐量调度线程

Stepping Thread Group 配置示例:

text
This group will start: 10 threads
Then start: 10 threads, every 30 seconds, using ramp-up: 5 seconds
Then hold load for: 300 seconds
Finally, stop: 10 threads every 10 seconds
该配置模拟:每 30 秒增加 10 个并发,达到峰值后保持 5 分钟,再逐步释放。

3.2 PerfMon Metrics Collector(服务器性能监控)
分布式压测时,不仅要关注 TPS 和响应时间,还需监控被测服务器的 CPU、内存、磁盘 I/O 等指标。PerfMon 插件正是为此而生。

安装:在 Available Plugins 中搜索 “PerfMon” 并安装。

配置步骤:

在被测服务器上启动 ServerAgent:

# 下载 ServerAgentwgethttps://github.com/undera/perfmon-agent/releases/download/2.2.3/ServerAgent-2.2.3.zipunzipServerAgent-2.2.3.zipcdServerAgent-2.2.3 ./startAgent.sh# 默认端口 4444

在 JMeter 中添加监听器:右键线程组 → Add → Listener → jp@gc - PerfMon Metrics Collector

配置监控指标:添加要监控的服务器,选择指标类型(CPU、Memory、Swap、Disk I/O、Network I/O 等)。

启动压测:实时曲线会显示在监听器中。

3.3 Throughput Shaping Timer(吞吐量定时器)
普通的定时器(如 Constant Throughput Timer)存在性能问题,且精度不高。Throughput Shaping Timer 能精确控制 RPS,与 Concurrency Thread Group 配合可实现“面向目标的负载测试”。

安装:在 Available Plugins 中搜索 “Throughput Shaping Timer”。

配置示例:

text
Step1: start load: 10 rps, end load: 10 rps, duration: 60s
Step2: start load: 10 rps, end load: 50 rps, duration: 60s
Step3: start load: 50 rps, end load: 50 rps, duration: 180s
这表示:第 1 分钟固定 10 RPS,第 2 分钟从 10 爬升到 50 RPS,后 3 分钟保持 50 RPS。

3.4 Basic Graphs(基础图表)
提供比默认监听器更丰富的图表:

Transactions per Second:实时 TPS 曲线

Response Times Over Time:响应时间曲线

Response Times vs Threads:响应时间与并发数的关系

四、自定义 Java 请求(Java Sampler)

当 JMeter 内置的取样器无法满足需求时(如需要测试自定义 TCP/UDP 协议、调用本地 SDK),可以通过继承 AbstractJavaSamplerClient 类来实现自定义取样器。

4.1 开发步骤
Step 1:创建 Java 工程,引入 JMeter 的 ApacheJMeter_core.jar 和 ApacheJMeter_java.jar(位于 $JMETER_HOME/lib/ext)。

Step 2:创建类继承 AbstractJavaSamplerClient,实现四个主要方法:

getDefaultParameters():定义可配置的输入参数

setupTest():测试开始前执行一次(如初始化连接)

runTest(JavaSamplerContext context):核心逻辑,每次迭代调用

teardownTest():测试结束后执行一次(如释放资源)

示例代码:

importorg.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;importorg.apache.jmeter.protocol.java.sampler.JavaSamplerContext;importorg.apache.jmeter.samplers.SampleResult;publicclassCustomJavaSamplerextendsAbstractJavaSamplerClient{// 定义可配置参数@OverridepublicArgumentsgetDefaultParameters(){Argumentsparams=newArguments();params.addArgument("sleep_time","100");returnparams;}// 每个取样器执行一次@OverridepublicSampleResultrunTest(JavaSamplerContextcontext){SampleResultresult=newSampleResult();result.sampleStart();try{longsleepTime=Long.parseLong(context.getParameter("sleep_time"));Thread.sleep(sleepTime);result.setSuccessful(true);result.setResponseMessage("OK");result.setResponseData("Success".getBytes());}catch(Exceptione){result.setSuccessful(false);result.setResponseMessage(e.getMessage());}result.sampleEnd();returnresult;}}

Step 3:打包成 JAR,放入所有 JMeter 节点(Master 和 Slave)的 lib/ext 目录,重启 JMeter。

Step 4:在线程组中添加 Java Request 取样器,选择自定义类,配置参数(如 sleep_time)。

4.2 使用场景
测试非 HTTP 协议的自定义后端服务

调用本地 SDK 或数据库存储过程

生成高精度的复杂测试数据(结合 CSV 读取)

五、自定义函数(Function)

自定义函数用于生成动态数据,比内置函数更灵活。

importorg.apache.jmeter.functions.AbstractFunction;publicclassCustomFunctionextendsAbstractFunction{// 实现 getArgumentDesc、setParameters、execute 等方法}

与自定义取样器相比,自定义函数更轻量,适合做数据处理;自定义取样器则适合实现完整的协议交互。

六、插件开发的最佳实践

性能优先:插件应在高并发下保持低开销,避免在 runTest 中创建重量级对象。

线程安全:同一线程内 runTest 是串行执行,但多线程下实例可能会重用,需注意并发安全。

日志规范:使用 JMeter 的 log 对象(如 log.info())输出日志,而非 System.out。

版本兼容性:针对主流 JMeter 版本(如 5.x)编译,测试稳定后再部署。

七、总结

本文核心:

Plugins Manager 是插件安装的统一入口

常用插件推荐:Custom Thread Groups(阶梯加压)、PerfMon(资源监控)、Throughput Shaping Timer(精确控压)

自定义 Java 请求:继承 AbstractJavaSamplerClient 实现 runTest 方法

自定义函数:更轻量,适合数据处理

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 14:44:21

基于Cron与Steam API的游戏库自动化管理实践

1. 项目概述与核心价值 最近在折腾一个挺有意思的小项目,叫 steam-cron-studio 。这名字听起来有点技术范儿,但说白了,它的核心目标很直接: 自动化管理你的Steam游戏库 。如果你是那种Steam库里躺着上百个游戏,但…

作者头像 李华
网站建设 2026/5/15 14:44:13

FreeRTOS任务通知发送函数深度解析:从IPC原理到高效应用

1. FreeRTOS任务通知:从“轻量级IPC”到“瑞士军刀”的深度解析在嵌入式实时操作系统(RTOS)的开发中,任务间通信(IPC)是构建复杂、高效系统的基石。传统的IPC机制,如信号量、消息队列、事件标志…

作者头像 李华
网站建设 2026/5/15 14:38:47

破解新能源售后难题:数据记录仪如何精准定位诊断仪与 T-BOX 的盲区

在新能源汽车的售后维修领域,随着车辆智能化、网联化程度的不断提升,传统的故障诊断方式正面临前所未有的挑战。尤其是那些偶发、无故障码、涉及多系统耦合的疑难杂症,常常让维修人员束手无策。诊断仪和车企的 T-BOX 虽然各有优势&#xff0c…

作者头像 李华
网站建设 2026/5/15 14:37:06

机器学习在音频合成中的应用:从参数预测到音色迁移

1. 项目概述:当音乐制作遇上机器学习如果你和我一样,在音乐制作或声音设计的路上摸爬滚打了好些年,那你一定经历过这样的时刻:面对一个复杂的合成器预设,你惊叹于其声音的丰富性,却完全搞不懂制作者到底拧了…

作者头像 李华
网站建设 2026/5/15 14:35:09

2025届学术党必备的降AI率方案解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在学术研究规范的推进进程里,与 AI 写论文有关的工具常常被运用在下像文献梳理框…

作者头像 李华
网站建设 2026/5/15 14:33:04

开源CRM与项目管理平台Agenzaar:为代理机构打造一体化业务解决方案

1. 项目概述:一个面向代理机构的开源CRM与项目管理平台 最近在和一些独立设计师、小型营销工作室的朋友聊天时,发现一个普遍痛点:业务量上来后,客户信息、项目进度、合同报价、时间追踪这些事,全靠Excel、Notion和一堆…

作者头像 李华