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

Extending JMeter Timer to delay timer variably

我正在使用 JMeter 进行负载测试。我想扩展 Timer 以进行毫秒延迟,然后用它来延迟下一个样本。我目前正在使用 BeanShell 脚本来完成此操作,但我想要一个 Java class 而不是脚本片段。我应该扩展什么计时器 class,有没有我可以看的示例?我还没有在网上找到任何东西:-|

我从来不需要实现定时器,但我确实实现了采样器、Post-处理器和监听器,所以我对定时器与其他组件的相似性做了一些假设。我也没有看到任何关于 JMeter 插件开发的好文档,我通常会深入研究 JMeter 代码以了解它们是如何做到的,然后查看 API 解释各种功能的文档。

基本上你需要实现 2 classes

  1. 一个 class 将 运行 一个计时器。 class 应该扩展 AbstractTestElement and implement Timer interface
  2. A GUI class 在 JMeter UI 中代表您的计时器。 class 应该扩展 AbstractTimerGui

所以插件的框架应该是这样的:

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, specifically looks like ConstantTimer 是如何完成的简洁明了的示例。您甚至可以直接扩展 ConstantTimer,例如 RandomTimer,而不是实现 Timer 接口。

对于UI部分你也可以关注ConstantTimerGui example, or if your interface is closer to random timer, you could extend AbstractRandomTimerGui

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