仅在n个断言错误

时间:2015-04-22 13:56:52

标签: jmeter jmeter-plugins

问题

我正在JMeter 2.13中对压力测试进行建模。我的想法是在达到某个响应时间上限之后停止测试,我用持续时间断言节点测试。

但是,我不希望在第一次失败后停止测试执行 - 在其他稳定情况下它可能是单个事件。我希望执行在 n 这样的断言错误后失败,所以我可以相对肯定系统受到压力,平均响应应该是我定义的上限,这是我想要的停止整个事情。

我尝试了什么

我正在使用JMeter插件中的Stepping Thread Group。在那里我可以使用复选框在错误后停止测试,但它会在第一时间执行此操作。我发现文档中没有其他节点可以对其进行建模,所以我猜测那里有一个我现在没看到的解决方法。

2 个答案:

答案 0 :(得分:3)

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

例如,您有3 User Defined Variables

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

User Defined Variables

示例断言代码:

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));
    }
}

断言工作示例:

Beanshell Assertion work

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

答案 1 :(得分:1)

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

如果您想要特定数量的错误,可以使用测试操作采样器,并结合使用if-controller - if(errorCount = n)测试操作停止测试

enter image description here