JMeter基本组件类型及实现方法
对于JMeter的基本组件,可以将其简单的划分为两大类:
- 一类是具备GUI的组件,即可以通过JMeter图形管理控制器在测试计划Tree中进行添加的组件,主要包括
- ThreadGroup(线程组)、Config(配置元件)、Timer(定时器)、Modifier(前置处理器)、Extractor(后置处理器)、Controller(逻辑控制器)、Sampler(测试抽样器)、Assertion(断言)和Listener(监听器);
- 另一类是非GUI组件,这类组件典型的代表是Function(函数)和某些子测试抽样器,如JavaSamplerClient。
对于组件一般有两种实现方法:
- GUI与逻辑控制分离
- GUI部分,通过继承各种组件GUI抽象类;
- 逻辑控制部分,通过继承组件逻辑抽象类和实现各种接口方式,从而实现不同组件的内部逻辑控制;
- GUI与逻辑控制不分离
- 与分离方法的区别在于,不单独实现GUI部分,在逻辑控制部分通过实现TestBean接口方法从而实现对GUI界面的配置。
JMeter插件式组件实现细节概述
TestElement是所有组件的最基本单元,组件类都是TestElement类的子类;
JMeter定义了上一章节所介绍的几种组件模型,并对其规范了各自所需发挥的作用。
(1)GUI部分的实现
GUI部分的实现,可以在JMeter实现主类org.apache.jmeter.JMeter中发现端倪,该类实际实现了JMeterPlugin接口中的getIconMappings()方法,来映射组件所对应的GUI图标,并为映射关系定义了一个二维数组,如下代码:
可以看到只要是插件类的GUI部分继承了以下数组中的GUI类,JMeter框架便会自动将其映射为所对应的组件类型和图标。
private static final String[][] DEFAULT_ICONS = {
{ "org.apache.jmeter.control.gui.TestPlanGui", "org/apache/jmeter/images/beaker.gif" },
{ "org.apache.jmeter.timers.gui.AbstractTimerGui", "org/apache/jmeter/images/timer.gif" },
{ "org.apache.jmeter.threads.gui.ThreadGroupGui", "org/apache/jmeter/images/thread.gif" },
{ "org.apache.jmeter.visualizers.gui.AbstractListenerGui", "org/apache/jmeter/images/meter.png" },
{ "org.apache.jmeter.config.gui.AbstractConfigGui", "org/apache/jmeter/images/testtubes.png" },
{ "org.apache.jmeter.processor.gui.AbstractPreProcessorGui", "org/apache/jmeter/images/leafnode.gif"},
{ "org.apache.jmeter.processor.gui.AbstractPostProcessorGui", "org/apache/jmeter/images/leafnodeflip.gif"},
{ "org.apache.jmeter.control.gui.AbstractControllerGui", "org/apache/jmeter/images/knob.gif" },
{ "org.apache.jmeter.control.gui.WorkBenchGui", "org/apache/jmeter/images/clipboard.gif" },
{ "org.apache.jmeter.samplers.gui.AbstractSamplerGui", "org/apache/jmeter/images/pipet.png" },
{ "org.apache.jmeter.assertions.gui.AbstractAssertionGui", "org/apache/jmeter/images/question.gif"}
};
(2)逻辑控制部分的实现细节,根据组件类别进行介绍
ThreadGroup(线程组)组件
- ThreadGroup(线程组)组件,继承AbstractThreadGroup抽象类,通过重写各类控制方法,如void scheduleThread(JMeterThread thread) 、stopThread(String threadName, boolean now) 、threadFinished(JMeterThread thread)等,来达到控制和协调各线程(虚拟用户)的行为,线程组是构建一个性能测试模型的最基本组件。
Config(配置元件)组件
Config(配置元件)组件相对其他组件比较特殊,通过继承ConfigTestElement类或只需要GUI部分的实现即可完成本体任务,而对于一个需要配置的组件类则需要实现ConfigMergabilityIndicator接口的public boolean applies(ConfigTestElement configElement)方法,用来指明哪些Config组件可以用来对其进行配置,这里参考TCPSampler的源代码如下: