Skip to content

编写首个自己的插件

JMeter 编写首个自己的插件

简介

编写Apache JMeter的首个插件是一个涉及Java编程和JMeter框架理解的过程。JMeter插件通常包括两部分:逻辑控制部分(后端处理)和GUI部分(用户界面)。逻辑控制部分负责执行实际的测试逻辑,而GUI部分则用于在JMeter界面中配置和显示插件的参数。

JMeter 组件的 GUI 约定

  • Jmeter 组件 GUI 约定:Jmeter中的GUI代码严格地与测试元件代码(这⾥指逻辑控制代码)分离。
    • 测试元件类:包含执行测试所需的所有逻辑,这些类定义了测试元件的行为。
    • GUI类:负责在JMeter的GUI界面中表示和配置测试元件。这些类通常继承自特定的GUI基类,提供了用于在GUI中显示和编辑测试元件属性的通用机制,通过JMeter的GUI框架与用户交互,允许用户配置测试元件的各种参数。
    • GUI元素继承抽象类:GUI元素通常继承自一个或多个抽象类,这些抽象类为GUI组件提供了基本的结构和行为

对应关系表

抽象类 继承的类 对应组件备注
AbstractAssertionGui AbstractJMeterGuiComponent 断言
AbstractConfigGui AbstractJMeterGuiComponent 配置
AbstractControllerGui AbstractJMeterGuiComponent 控制
AbstractPostProcessorGui AbstractScopedJMeterGuiComponent 后置处理器
AbstractPreProcessorGui AbstractJMeterGuiComponent 前置处理器
AbstractSamplerGui AbstractJMeterGuiComponent 取样器
AbstractThreadGroupGui AbstractJMeterGuiComponent 线程组
AbstractTimerGui AbstractJMeterGuiComponent 定时器
AbstractListrnerGui AbstractJMeterGuiComponent 监听器
AbstractVisualizer AbstractListrnerGui 组件依赖
AbstractScopedJMeterGuiComponent AbstractJMeterGuiComponent 组件依赖
AbstractJMeterGuiComponent JPanel 组件依赖
AbstractFunction Function 组件依赖

JMeter Redis Data Set 解析

  • 最常见的Redis Data Element代码结构:
  • 示例项目地址:https://github.com/hgwz/jmeter-plugins.git
  • 简要解析:
    • examples:包含Plugin的jmx教程。
    • graphs-basic:包含图像相关的基础元素。
    • redis:Redis连接、数据检索、数据处理、JMeter集成、配置界面(可选)、错误处理与日志等。

todo 截图

  • Response Time 类图
    • 继承自AbstaractOverTimeVisualizen图像抽象类,将数据加载过来并通过图形化的方式展示。 todo 截图
  • AutoStop类图
    • JautoStopPanel:包含初始化元素、校验、配置原件、Panel、lable等。
    • AutoStopGui:定义主要事件。
    • Autostop:逻辑核心类。 todo 截图

JMeter BackEnd Listener Client

  • BackendListenerClient的主要功能是在多线程执行压测过程中,接收和处理JMeter发送的SampleResult对象(包含了测试的元数据和结果)。这些结果可以通过BackendListenerClient的实现类被发送到不同的后端系统。

方法总结

修饰符和类型 方法和说明
SampleResult createSampleResult(BackendListenerContext context, SampleResult result) 创建SampleResult的副本,此方法可用于自定义副本中保留的内容。
Arguments getDefaultParameters() 提供此测试支持的参数列表。
void handleSampleResults(List sampleResults, BackendListenerContext context)处理sampleResults,这可以通过多种方式完成:写入文件写入远程服务器...
void setupTest(BackendListenerContext context)执行此客户端所需的任何初始化。
void teardownTest(BackendListenerContext context)在测试运行结束时进行所需的任何清理。
  • setupTest:
void setupTest(BackendListenercontext上下文)
    抛出异常

执行此客户端所需的任何初始化。通常建议进行任何初始化,例如在seupTest方法面不是runTest方法中获取参数值,以尽可能减少测试的开销。
参数: context-要运行的上下文。这提供对初始化参数的访问。上下文是只读的
抛出: Exception-安装失败时

  • handleSampleResults
    void handleSampleResults(列表<SampleResult> sampleResults
    Backendristenercontext 上下文)
    
    处理sampleResults,这可以通过多种方式完成:
    • 写入文件
    • 写入远程服务器 参数:
  • sampleResults列表SampleResult
  • context-要运行的上下文。这提供对初始化参数的访问。

完成第⼀个自己的 ES BackEndListener Plugin

  • 项目地址: https://github.com/hgwz/perf-es.git

项目简介

  • pom.xml文件:核心依赖ApacheJMeter_config、es官方依赖elasticsearch-rest-client
  • ElasticSearchRequestst:定义了当前版本发送数据的方式
  • ElasticSearchMetric:定义了Metric,定义向es发送的信息
  • ElasticSearchMetricSender:初始化Esclient
  • ElasticSearchBackendClient:参数化,setupTest创建个人es的链接、handleSampResults发送请求 todo 截图 todo 截图

总结

  • 简介
  • JMeter 组件的 GUI 约定
  • JMeter Redis Data Set 解析
  • JMeter BackEnd Listener Client
  • 完成第⼀个⾃⼰的 ES BackEndListener Plugin