原地址 https://www.coder.work/article/7090277
我有一个事务 Controller ,它在我的 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 时测试停止。我不确定要修复上面的代码。
有人可以告诉我上面的代码有什么问题吗?
最佳答案
变量特定于 1 个线程,而属性由所有线程共享。
参见:
确保同步访问
另一种选择是使用自定义 java 类作为单例并增加其值。
这里是一个使用 Beanshell 的示例实现(为了性能首选 JSR223 + Groovy):
-
在测试开始时重置计数器的 setupThreadGroup:
-
更新计数器的 BeanshellPostProcessor:
请注意,当您调用 setStopTestNow 时,测试线程会被中断,但不会在此时准确停止,除非您有一些计时器(通常是这种情况)
prev.setStopTestNow(true);
关于jmeter - 如何在指定数量的线程失败后停止 Jmeter 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31375570/