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

指定数量的线程失败后如何停止Jmeter测试,jmeter,beanshell,Jmeter,Beanshell,我有一个事务控制器,它在我的Jmeter测试计划中有一个http请求。事务名称和url来自CSV文件。最后,总执行分为5个不同的事务 测试计划: 测试计划 -螺纹组 -用户定义变量 总样本执行量为8000-10000。现在我想要的是,如果样本失败总数达到100,我的JMeter测试应该停止测试执行 我已经添加了用户定义的变量名“thread”和值“0”。我在Beanshell后处理器中添加了以下代码 int count= Integer.parseInt(vars.get("thread"));

我有一个事务控制器,它在我的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时,测试停止。我不确定谁来修复上面的代码


有人能告诉我上面的代码有什么问题吗

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

见:

确保同步访问

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

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

  • 测试启动时重置计数器的setupThreadGroup:

  • 更新计数器的BeanShell后处理器:

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

上一个setStopTestNow(真)


你们有嵌套的示例吗?若我为单个用户运行它,并将错误计数限制为3,那个么它可以正常工作。测试在3次失败后停止。但当我为5个用户运行它时,最大错误计数为s3,测试在8次失败后停止。这是一个简单的脚本。没有嵌套样本。你试过使用道具而不是变量吗?没有。你能分享一些细节吗?道具是全局的,而变量是局部的线程。因为我自己无法尝试,所以我不会推荐它作为答案,但如果它对你有效,我会给出更好的解释。是的,我正在努力。但看起来我做错了什么。我已经添加了声明为属性,但仍然面临相同的问题字符串count1=props.setProperty(“abc”,“0”);String thread=props.getProperty(“abc”);int count=Integer.parseInt(vars.get(“线程”));if(prev.getErrorCount()==1){count++;System.out.println(count);vars.put(“thread”,Integer.toString(count));}if(count==3){System.out.println(“达到负载测试中的最大错误数,停止测试”);log.info(“达到负载测试中的最大错误数,停止测试”);prev.setStopTestNow(true);}非常感谢您的帮助。上面的解决方案我已经尝试过了,并且成功了:)。我感谢你的帮助。