如何在指定数量的线程失败后停止 Jmeter 测试

How to stop Jmeter test after specified number of threads failed

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

测试计划:

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

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

我添加了用户定义的变量名称 "thread" 并且值为“0”。我在 Beanshell Post-Processor

中添加了以下代码
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 时测试停止。我不确定要修复上面的代码。

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

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

参见:

确保同步访问

另一种选择是使用自定义 java class 作为单例并增加其值。

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

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

  • 更新计数器的BeanshellPostProcessor:

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

prev.setStopTestNow(true);