Skip to content

[Need support]: Running Selenium Cucumber BDD tests in parallel (multi-threaded) - URGENT #300

Description

@tempdamac

Describe the problem

We are currently implementing Healenium in our test automation setup and would like to seek your guidance regarding an issue we’re encountering during parallel execution.

Here's a quick overview of our setup:

  • Healenium services are deployed via python scripts (converted the shell scripts).
  • The hlm-backend is hosted on the project and psql database is hosted on a dedicated virtual machine.
  • Automated scripts are executed from a separate run machine.

Everything works as expected when tests are run sequentially. However, when we execute our tests in parallel (multi-threaded), we intermittently receive the following error, even though all Healenium services are up and running:

com.epam.healenium.exception.HealeniumException: [Execute Error] Unable to connect to the hlm-backend service. Please check if the service is up and running, and verify that the connection URL is correct.

We would appreciate it if you could advise us on:

  • Any recommended configuration or limits regarding parallel execution.
  • Connection handling or timeout settings we should be aware of.
  • Whether the hlm-backend supports concurrent requests reliably in our setup.

Thank you in advance for your support. Please let us know if you need additional logs or configuration details.

Healenium Web version

3.5.5

Healenium Backend version

2.1.1

Selenium version

4

Platform

No response

Properties file

recovery-tries = 1
score-cap = .6
heal-enabled = true
hlm.server.url = http://localhost:7878
hlm.imitator.url = http://localhost:8000
healenium.server.timeout=300000

Logs appeared during using Healenium

Downloading healenium-backend version 3.4.6...
Downloaded hlm-backend.jar successfully.
Starting hlm-backend service...
hlm-backend started with PID: 72432
Upgrading pip...
Installing imitator service dependencies...
Starting healenium-selector-imitator service...
healenium-selector-imitator started with PID: 33980
All services deployed successfully.

com.epam.healenium.exception.HealeniumException: [Execute Error] Unable to connect to the hlm-backend service. Please check if the service is up and running, and verify that the connection URL is correct.
[TestRun main     ]Apr-03 12:10:11 Command       -    	at com.epam.healenium.client.RestClient.serverExecute(RestClient.java:271)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at com.epam.healenium.client.RestClient.getElements(RestClient.java:137)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at com.epam.healenium.SelfHealingEngine.loadStoredSelectors(SelfHealingEngine.java:169)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at com.epam.healenium.SelfHealingDriver.callInitActions(SelfHealingDriver.java:71)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at com.epam.healenium.SelfHealingDriver.create(SelfHealingDriver.java:42)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at common.functions.DriverUtils.newHeadlessChromeDriver(DriverUtils.java:447)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at common.functions.DriverUtils.openBrowser(DriverUtils.java:285)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at common.functions.Hooks.initialize(Hooks.java:59)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at cucumber.runtime.Utils$1.call(Utils.java:26)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at cucumber.runtime.Timeout.timeout(Timeout.java:16)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at cucumber.runtime.Utils.invoke(Utils.java:20)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at cucumber.runtime.java.JavaHookDefinition.execute(JavaHookDefinition.java:65)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at cucumber.runner.HookDefinitionMatch.runStep(HookDefinitionMatch.java:16)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at cucumber.runner.TestStep.executeStep(TestStep.java:65)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at cucumber.runner.TestStep.run(TestStep.java:50)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at cucumber.runner.TestCase.run(TestCase.java:42)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at cucumber.runner.Runner.runPickle(Runner.java:50)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at io.cucumber.testng.TestNGCucumberRunner.runScenario(TestNGCucumberRunner.java:79)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at hrtalent.testrunner.TestRunner.feature(TestRunner.java:40)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:139)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.invokers.TestInvoker.invokeMethod(TestInvoker.java:664)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.invokers.TestInvoker.invokeTestMethod(TestInvoker.java:228)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.invokers.MethodRunner.runInSequence(MethodRunner.java:63)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.invokers.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:961)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.invokers.TestInvoker.invokeTestMethods(TestInvoker.java:201)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.invokers.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:148)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.invokers.TestMethodWorker.run(TestMethodWorker.java:128)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.thread.graph.TestNGFutureTask.run(TestNGFutureTask.java:22)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.lang.Thread.run(Thread.java:833)
[TestRun main     ]Apr-03 12:10:11 Command       -    Caused by: java.io.UncheckedIOException: java.net.ConnectException
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute0(JdkHttpClient.java:436)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.openqa.selenium.remote.http.AddSeleniumUserAgent.lambda$apply$0(AddSeleniumUserAgent.java:42)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.openqa.selenium.remote.http.Filter.lambda$andFinally$1(Filter.java:55)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.openqa.selenium.remote.http.jdk.JdkHttpClient.execute(JdkHttpClient.java:352)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at com.epam.healenium.client.RestClient.serverExecute(RestClient.java:266)
[TestRun main     ]Apr-03 12:10:11 Command       -    	... 40 more
[TestRun main     ]Apr-03 12:10:11 Command       -    Caused by: java.net.ConnectException
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.net.http/jdk.internal.net.http.common.Utils.toConnectException(Utils.java:1055)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:198)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.net.http/jdk.internal.net.http.PlainHttpConnection.checkRetryConnect(PlainHttpConnection.java:230)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$1(PlainHttpConnection.java:206)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:911)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)
[TestRun main     ]Apr-03 12:10:11 Command       -    	... 3 more
[TestRun main     ]Apr-03 12:10:11 Command       -    Caused by: java.nio.channels.ClosedChannelException
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/sun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:195)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/sun.nio.ch.SocketChannelImpl.beginConnect(SocketChannelImpl.java:760)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:848)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.net.http/jdk.internal.net.http.PlainHttpConnection.lambda$connectAsync$0(PlainHttpConnection.java:183)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:185)
[TestRun main     ]Apr-03 12:10:11 Command       -    	... 9 more
[TestRun main     ]Apr-03 12:10:11 Command       -    
[TestRun main     ]Apr-03 12:10:11 Command       -          java.lang.IllegalArgumentException: Driver must be set
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.openqa.selenium.internal.Require.nonNull(Require.java:61)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.openqa.selenium.interactions.Actions.<init>(Actions.java:59)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at common.actions.Element.<init>(Element.java:53)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at hrtalent.pageobjects.adp.ADPGroupRecordAuditingPage.<init>(ADPGroupRecordAuditingPage.java:10)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at hrtalent.stepdefinitions.adp.functions.ADPCommonFunctions.<init>(ADPCommonFunctions.java:41)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at hrtalent.stepdefinitions.adp.functions.ADPApiAction.<init>(ADPApiAction.java:14)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.picocontainer.injectors.AbstractInjector.newInstance(AbstractInjector.java:145)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:342)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:678)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at io.cucumber.picocontainer.PicoFactory.getInstance(PicoFactory.java:42)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at cucumber.runtime.java.ObjectFactoryLoader$ObjectFactoryAdapter.getInstance(ObjectFactoryLoader.java:157)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at cucumber.runtime.java.JavaHookDefinition.execute(JavaHookDefinition.java:65)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at cucumber.runner.HookDefinitionMatch.runStep(HookDefinitionMatch.java:16)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at cucumber.runner.TestStep.executeStep(TestStep.java:65)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at cucumber.runner.TestStep.run(TestStep.java:50)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at cucumber.runner.TestCase.run(TestCase.java:42)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at cucumber.runner.Runner.runPickle(Runner.java:50)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at io.cucumber.testng.TestNGCucumberRunner.runScenario(TestNGCucumberRunner.java:79)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at hrtalent.testrunner.TestRunner.feature(TestRunner.java:40)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:139)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.invokers.TestInvoker.invokeMethod(TestInvoker.java:664)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.invokers.TestInvoker.invokeTestMethod(TestInvoker.java:228)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.invokers.MethodRunner.runInSequence(MethodRunner.java:63)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.invokers.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:961)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.invokers.TestInvoker.invokeTestMethods(TestInvoker.java:201)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.invokers.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:148)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.invokers.TestMethodWorker.run(TestMethodWorker.java:128)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at org.testng.internal.thread.graph.TestNGFutureTask.run(TestNGFutureTask.java:22)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[TestRun main     ]Apr-03 12:10:11 Command       -    	at java.base/java.lang.Thread.run(Thread.java:833)

Additional context

No response

Metadata

Metadata

Assignees

Labels

help wantedExtra attention is needed

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions