JMeter-避免线程突然关闭

时间:2019-04-05 21:42:20

标签: apache jmeter jmeter-5.0

我有一个testPlan,其中包含多个事务控制器(我称为UserJourneys),每个控制器都由一些采样器(JourneySteps)组成。

我面临的问题是,一旦测试持续时间结束,Jmeter就会杀死所有线程,并且不考虑它们是否位于UserJourney(事务控制器)的中间。

在其中一些UJ上,我做了一些重要的事情,需要在用户再次登录之前完成这些工作,否则下一次迭代(新的测试运行)将失败。

问题是:有没有办法告诉JMeter,它需要在杀死线程之前等待每个线程到达其flow / UJ / TransactionController的末尾?

谢谢!

1 个答案:

答案 0 :(得分:1)

从5.1.1版本开始,这是不可能的,您应该在以下位置请求增强功能:

解决方案是添加一个包含JSR223预处理器的Thread Group作为Flow Control Action的第一个子代:

Configuration

JSR223 PreProcessor将包含以下常规代码:

    import org.apache.jorphan.util.JMeterStopTestException;

    long startDate = vars["TESTSTART.MS"].toLong();
    long now = System.currentTimeMillis();
    String testDuration = Parameters;
    if ((now - startDate) >= testDuration.toLong()) {
        log.info("Test duration "+testDuration+" reached");
        throw new JMeterStopTestException("Test duration "+testDuration+"reached ");
    } else {
        log.info("Test duration "+testDuration+" not reached yet");
    }

并进行如下配置:

JSR223 PreProcessor configuration

最后,您可以使用以下命令在命令行上以毫秒为单位设置属性 testDuration

  

-JtestDuration = 3600000

如果您想了解有关JMeter和性能测试的更多信息,此book可以为您提供帮助。