2015-07-13 96 views
3

我有一个事务控制器,它在我的Jmeter测试计划中有一个http请求。交易名称和网址来自CSV文件。最后,执行总计分为5个不同的交易。如何在指定的线程数量失败后停止Jmeter测试

TestPlan中:

TestPlan中 -Thread组 - 用户定义的变量

总样品执行将是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时停止测试。我不确定谁来修复上面的代码。

有人能让我知道上面的代码中有什么问题吗?

+0

您是否有嵌套样本? – Ross

+0

如果我为单个用户运行它,并保持错误计数限制为3,它工作正常。 3名失败者后停止测试。但是,当我运行5个用户,最大错误数为3,8次失败后停止测试。 它是简单的脚本。没有嵌套样本。 – user1169236

+0

您是否尝试过使用道具而不是'vars'? – Ross

回答

2

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

参见:

确保你同步访问

另一种选择是使用自定义的Java类作为一个Singleton和增加其值。

这里使用的BeanShell(身高JSR223 + Groovy的演出)的范例:

  • setupThreadGroup上测试启动计数器复位:enter image description here

  • BeanshellPostProcessor的更新计数器:enter image description here

请注意,当您调用setStopTestNow时,测试线程会中断b除非你有一些定时器(通常是这种情况),否则不要完全停止。

prev.setStopTestNow(true);

+0

是的,我正在努力。但看起来我做错了什么。我已经添加声明为属性,但仍面临同样的问题String count1 = props.setProperty(“abc”,“0”); String thread = props.getProperty(“abc”); int count = Integer.parseInt(vars.get(“thread”));如果(prev.getErrorCount()== 1){count = 0; System.out.println(count); vars.put(“thread”,Integer.toString(count)); } 如果(计数== 3){ 的System.out.println( “达到在负载测试错误的最大数量,停止测试”); log.info(“达到负载测试中的最大错误数,停止测试”); prev.setStopTestNow(true); } – user1169236

+0

非常感谢您的帮助。以上解决方案我已经尝试过,它的工作:)。我感谢您的帮助。 – user1169236

相关问题