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

标签 jmeter beanshell

我有一个事务 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/

相关文章:

JMeter:使用 JDBC 请求将记录插入数据库

linux - 用于检查进程是否已在运行并在是时退出的 Shell 脚本

java - 执行包含 java -jar Runtime.exec() 的 shell 脚本,它将使用哪个 java,操作系统级别还是应用程序级别

csv - "Object constructor"JMeter中的Beanshell错误

JMeter:如何加载测试在负载测试期间不可用的实时流媒体视频

java - Jmeter远程测试: . RemoteJMeterEngineImpl_Stub(无安全管理器:RMI类加载器禁用)

java - 使用 BeanShell 在方法内执行脚本

java - 如何在 JMeter Beanshell 中对数字数组进行排序

java - 如何使用JMeter作为功能测试工具?

java - Beanshell 模式匹配器正则表达式