【问题标题】:How to stop Jmeter test after specified number of threads failed如何在指定数量的线程失败后停止 Jmeter 测试
【发布时间】:2015-07-13 04:48:35
【问题描述】:

我有一个事务控制器,在我的 Jmeter 测试计划中有一个 http 请求。交易名称和 url 来自 CSV 文件。最后,总执行分为 5 个不同的事务。

测试计划:

测试计划 -线程组 - 用户定义变量

总样本执行次数为 8000-10000。现在我想要的是,如果总样本失败次数达到 100,我的 JMeter 测试应该停止测试执行。

我添加了用户定义的变量名称“thread”和值为“0”。我在 Beanshell 后处理器中添加了以下代码

int count= Integer.parseInt(vars.get("thread"));
if (prev.getErrorCount()==1){
count++;
System.out.println(count);
vars.put("thread",Integer.toString(count));
}

if (count==100){

System.out.println("Reached to max number of errors in load test, stopping test");
log.info ("Reached to max number of errors in load test, stopping test");
prev.setStopTestNow(true);

}

不知何故,代码没有按预期工作。当错误计数达到 100 时,Jmeter 测试不会停止。当错误计数达到 130 时停止测试。我不确定谁来修复上面的代码。

有人可以告诉我上面的代码有什么问题吗?

【问题讨论】:

  • 你有嵌套样本吗?
  • 如果我为单个用户运行它并将错误计数限制为 3,它工作正常。 3 次失败后测试停止。但是当我为 5 个用户运行它时,最大错误计数为 3,测试在 8 次失败后停止。这是简单的脚本。没有嵌套样本。
  • 你试过用 props 代替 'vars' 吗?
  • 不,我没有。你能分享一些细节吗?
  • props 是全局的,而 vars 是本地化的线程。因为我自己无法尝试,所以我不会推荐它作为答案,但如果它适合你,我会给出更好的解释。

标签: jmeter beanshell


【解决方案1】:

变量特定于 1 个线程,而属性由所有线程共享。

见:

确保您同步访问

另一种选择是将自定义 java 类用作 Singleton 并增加其值。

这里是一个使用 Beanshell 的示例实现(性能首选 JSR223 + Groovy):

  • 在测试开始时重置计数器的setupThreadGroup:

  • 更新计数器的BeanshellPostProcessor:

请注意,当您调用 setStopTestNow 时,测试线程会被中断,但此时不会完全停止,除非您有一些计时器(通常是这种情况)

prev.setStopTestNow(true);

【讨论】:

  • 是的,我正在努力。但看起来我做错了什么。我添加了声明为属性,但仍然面临同样的问题 String count1 = props.setProperty("abc","0");字符串线程 = props.getProperty("abc"); int count= Integer.parseInt(vars.get("thread")); if (prev.getErrorCount()==1){ count++; System.out.println(count); vars.put("线程",Integer.toString(count)); } if (count==3){ System.out.println("负载测试达到最大错误数,停止测试"); log.info(“负载测试中的错误达到最大数量,停止测试”); prev.setStopTestNow(true); }
  • 非常感谢您帮助我。上面的解决方案我已经尝试过并且有效:)。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多