Skip to content

Ошибка в адаптере при параллельном выполнении тестов #104

@wlassow

Description

@wlassow

Добрый день
Использую cucumber 7.13.0 + testNG 7.7.0 с адаптером версии 1.4.0
При параллельном выполнении тестов выпадает следующая ошибка:

java.lang.NullPointerException: Cannot invoke "java.lang.Long.longValue()" because "time" is null
	at ru.testit.writers.Converter.dateToOffsetDateTime(Converter.java:234)
	at ru.testit.writers.Converter.lambda$convertResultStep$7(Converter.java:202)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
	at ru.testit.writers.Converter.convertResultStep(Converter.java:210)
	at ru.testit.writers.Converter.testResultToAutoTestResultsForTestRunModel(Converter.java:65)
	at ru.testit.writers.HttpWriter.writeTest(HttpWriter.java:71)
	at ru.testit.services.AdapterManager.stopTestCase(AdapterManager.java:312)
	at ru.testit.listener.BaseCucumber7Listener.testFinished(BaseCucumber7Listener.java:187)
	at io.cucumber.core.eventbus.AbstractEventPublisher.send(AbstractEventPublisher.java:51)
	at io.cucumber.core.eventbus.AbstractEventBus.send(AbstractEventBus.java:12)
	at io.cucumber.core.runtime.SynchronizedEventBus.send(SynchronizedEventBus.java:47)
	at io.cucumber.core.runtime.ThreadLocalRunnerSupplier$LocalEventBus.send(ThreadLocalRunnerSupplier.java:62)
	at io.cucumber.core.runner.TestCase.emitTestCaseFinished(TestCase.java:219)
	at io.cucumber.core.runner.TestCase.run(TestCase.java:98)
	at io.cucumber.core.runner.Runner.runPickle(Runner.java:75)
	at io.cucumber.testng.TestNGCucumberRunner.lambda$runScenario$1(TestNGCucumberRunner.java:132)
	at io.cucumber.core.runtime.CucumberExecutionContext.lambda$runTestCase$5(CucumberExecutionContext.java:137)
	at io.cucumber.core.runtime.RethrowingThrowableCollector.executeAndThrow(RethrowingThrowableCollector.java:23)
	at io.cucumber.core.runtime.CucumberExecutionContext.runTestCase(CucumberExecutionContext.java:137)
	at io.cucumber.testng.TestNGCucumberRunner.runScenario(TestNGCucumberRunner.java:129)
	at io.cucumber.testng.AbstractTestNGCucumberTests.runScenario(AbstractTestNGCucumberTests.java:35)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:139)
	at org.testng.internal.invokers.TestInvoker.invokeMethod(TestInvoker.java:677)
	at org.testng.internal.invokers.TestInvoker.invokeTestMethod(TestInvoker.java:221)
	at org.testng.internal.invokers.TestMethodWithDataProviderMethodWorker.call(TestMethodWithDataProviderMethodWorker.java:80)
	at org.testng.internal.invokers.TestMethodWithDataProviderMethodWorker.call(TestMethodWithDataProviderMethodWorker.java:17)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:833)

При этом при параллельном выполнении с отключенным адаптером ошибок нет, при включённом адаптере и не-параллельном выполнении тоже.
Ошибки падают в т.ч. на тех же сценариях, которые прямо перед этим были выполнены успешно (т.е. при использовании scenario outline с несколькими examples).
Кол-во потоков никак не влияет на выпадение ошибки, падает даже на двух потоках.

Настройки параллельного выполнения стандартные в соответствии с документацией кукумбера https://cucumber.io/docs/guides/parallel-execution/?lang=java#testng

public class CucumberRunnerTest extends AbstractTestNGCucumberTests {
    @Override
    @DataProvider(parallel = true)
    public Object[][] scenarios() {
        return super.scenarios();
    }
}

Проперти testit:
url=url
privateToken=token
projectId=project
configurationId=config
certValidation=false
adapterMode=2
automaticCreationTestCases=false

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions