1

我有一个 testPlan,它有几个事务控制器(我称之为 UserJourneys),每个控制器都由一些采样器(JourneySteps)组成。

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

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

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

提前致谢!

4

1 回答 1

1

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

解决方案是添加一个包含 JSR223 PreProcessor的Flow Control Action作为Thread Group的第一个子项:

配置

JSR223 PreProcessor将包含以下 groovy 代码:

    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 预处理器配置

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

-JtestDuration=3600000

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

于 2019-04-07T17:34:16.667 回答