虽然 JMeter 本身功能强大但在实际工作中总有一些特定场景需要额外扩展比如生成复杂的业务数据、实时监控服务器资源、实现更精细的负载模型等。JMeter 支持两种扩展方式安装第三方插件和自定义开发。本文将介绍如何使用 Plugins Manager 安装常用插件以及如何通过 Java 开发自定义函数和取样器。一、JMeter 插件生态概览JMeter 官方提供了核心功能而大量高级特性由 JMeter Plugins 项目https://jmeter-plugins.org提供。二、安装 JMeter Plugins Manager2.1 下载安装从 https://jmeter-plugins.org/install/Install/ 下载 jmeter-plugins-manager-*.jar将 JAR 文件复制到 $JMETER_HOME/lib/ext 目录下重启 JMeter2.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 配置示例textThis group will start: 10 threadsThen start: 10 threads, every 30 seconds, using ramp-up: 5 secondsThen hold load for: 300 secondsFinally, 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 → jpgc - 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”。配置示例textStep1: start load: 10 rps, end load: 10 rps, duration: 60sStep2: start load: 10 rps, end load: 50 rps, duration: 60sStep3: 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(){ArgumentsparamsnewArguments();params.addArgument(sleep_time,100);returnparams;}// 每个取样器执行一次OverridepublicSampleResultrunTest(JavaSamplerContextcontext){SampleResultresultnewSampleResult();result.sampleStart();try{longsleepTimeLong.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 方法自定义函数更轻量适合数据处理