仅在 n 个断言错误后停止 JMeter 测试执行

Stop JMeter test execution only after n assertion errors

问题

我正在 JMeter 2.13 中建模压力测试。我的想法是在达到一定的响应时间上限后停止测试,我使用 Duration Assertion 节点进行测试。

但是,我不想在第一次出现此类失败后停止测试执行 - 在其他情况稳定的情况下,这可能是单个事件。我希望在 n 这样的断言错误之后执行失败,所以我可以相对确定系统受到压力并且平均响应应该在我定义的上限附近,这就是我想阻止这一切。

我试过的

我正在使用 JMeter 插件中的步进线程组。在那里,我可以使用复选框在出错后停止测试,但它是第一次这样做。我在文档中没有发现其他可以对其建模的节点,所以我猜有一个我现在没有看到的解决方法。

关闭但不完全符合您的要求:Auto-Stop Jmeter 插件。请参阅文档 here。如果在一定时间内有 n% 失败,您可以将其配置为停止测试。

如果你想要特定数量的错误,你可以使用测试动作采样​​器,结合 if 控制器 - if (errorCount = n) test-action stop test

我建议切换到 Beanshell Assertion,因为它更灵活并且允许您在其中放置一些自定义代码。

例如你有 3 User Defined Variables:

  • threshold - 最大采样器执行时间。任何超过阈值的值都将被计算在内
  • maxErrors - 最大错误数,如果达到将停止测试 and/or 超出
  • failures - 变量保持断言失败计数。一开始应该为零。

示例断言代码:

long elapsed = SampleResult.getTime();

long threshold = Long.parseLong(vars.get("threshold"));

if (elapsed > threshold) {

    int failureCount = Integer.parseInt(vars.get("failures"));
    failureCount++;

    int maxErrors = Integer.parseInt(vars.get("maxErrors"));

    if (failureCount >= maxErrors) {
        SampleResult.setSuccessful(false);
        SampleResult.setResponseMessage(failureCount + " requests failed to finish in " + threshold + " ms");
        SampleResult.setStopTest(true);
    } else {

        vars.put("failures", String.valueOf(failureCount));
    }
}

示例断言工作:

请参阅 How to use BeanShell: JMeter's favorite built-in component 指南以了解有关使用脚本扩展 JMeter 测试的更多信息。