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
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:
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:
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
Additional context
No response