我有一个事务控制器,在我的Jmeter测试计划中有一个http请求。交易名称和网址来自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时,测试停止。我不确定是谁修复上面的代码。
有人可以告诉我上面代码中的问题吗?
答案 0 :(得分:3)
变量特定于1个线程,而属性由所有线程共享。
请参阅:
确保您同步访问权限
另一种选择是使用自定义java类作为Singleton并增加其值。
这是一个使用Beanshell的示例实现(Prefer JSR223 + Groovy用于表演):
在测试开始时重置计数器的setupThreadGroup:
更新计数器的BeanshellPostProcessor:
请注意,当您调用setStopTestNow时,测试线程会被中断,但此时不会完全停止,除非您有一些计时器(通常是这种情况)
prev.setStopTestNow(真);