扩展JMeter定时器以可变地延迟定时器

时间:2016-03-22 14:35:52

标签: java jmeter load-testing beanshell

我正在使用JMeter进行负载测试。我想扩展Timer以延迟毫秒,然后用它来延迟下一个样本。我目前正在使用BeanShell Script来完成此任务,但我希望为它创建一个Java类而不是脚本片段。我应该扩展什么Timer类,有一个例子我可以看一下吗?我没有在网上找到任何东西: - |

1 个答案:

答案 0 :(得分:1)

我从来没有实现过计时器,但我确实实现了Sampler,Post-Processor和Listener,因此我对Timer与其他组件的相似性做了一些假设。此外,我没有看到任何关于JMeter插件开发的好文档,我通常会使用JMeter代码来了解它们是如何做到的,然后检查解释各种函数的API文档。

基本上你需要实现2个类

  1. 将运行计时器的类。该课程应扩展AbstractTestElement并实施Timer interface
  2. 用于在JMeter UI中表示计时器的GUI类。该课程应该扩展AbstractTimerGui
  3. 所以插件的骨架看起来像这样:

    public class MyTimerGui extends AbstractTimerGui {
        // usually has at least the following 3 functions:
    
        @Override
        public TestElement createTestElement() {
        }
    
        @Override
        public void modifyTestElement(TestElement timer) { 
        }
    
        @Override
        public void configure(TestElement el) {
        }
    }
    
    public class MyTimer extends AbstractTestElement implements Timer {
    
        long delay() {
            return someDelayOfYourChoice;
        }
    
        // you may need some other functions, e.g. running on test start or sample start
    }
    

    就示例而言,您可以查看built-in timers,具体看起来像ConstantTimer这是一个很好的简洁示例,说明它是如何完成的。你甚至可以直接扩展ConstantTimer,就像RandomTimer那样,而不是实现Timer接口。

    对于UI部分,您也可以关注ConstantTimerGui示例,或者如果您的界面更接近随机计时器,则可以扩展AbstractRandomTimerGui

    要构建插件,我建议使用类似于this example的maven项目。然后,对于运行时,您将其部署到lib/ext文件夹中。如果您的插件使用JMeter中不存在的任何库,则还需要将它们部署在JMeter的lib文件夹中。