原地址 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:enter image description here

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

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

prev.setStopTestNow(true);

 

关于jmeter - 如何在指定数量的线程失败后停止 Jmeter 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31375570/

Copyright © 2024 harry_han
Powered by .NET 9.0 on Kubernetes