Serenity BDD与Report Portal集成冲突致测试报告空白求助
问题描述
近期完成BDD Cucumber框架与Report Portal的集成,测试在Circle CI环境运行时,出现Serenity BDD Cucumber测试报告空白的问题,排查发现由以下报错导致:
java.lang.NoSuchMethodError: net.thucydides.core.model.TestStep.getStartTime()Ljava/time/ZonedDateTime; at com.github.invictum.reportportal.recorder.BddDataDriven.record(BddDataDriven.java:30) at com.github.invictum.reportportal.ReportPortalListener.testFinished(ReportPortalListener.java:51) at net.thucydides.core.steps.StepEventBus.testFinished(StepEventBus.java:256) at net.serenitybdd.cucumber.SerenityReporter.result(SerenityReporter.java:611) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at cucumber.runtime.Utils$1.call(Utils.java:40) at cucumber.runtime.Timeout.timeout(Timeout.java:16) at cucumber.runtime.Utils.invoke(Utils.java:34) at cucumber.runtime.RuntimeOptions$1.invoke(RuntimeOptions.java:294) at com.sun.proxy.$Proxy21.result(Unknown Source) at cucumber.runtime.junit.JUnitReporter.result(JUnitReporter.java:121) at cucumber.runtime.Runtime.runStep(Runtime.java:310) at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44) at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39) at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44) at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:102) at org.junit.runners.Suite.runChild(Suite.java:128) at org.junit.runners.Suite.runChild(Suite.java:27) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at cucumber.runtime.junit.ExamplesRunner.run(ExamplesRunner.java:59) at org.junit.runners.Suite.runChild(Suite.java:128) at org.junit.runners.Suite.runChild(Suite.java:27) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at cucumber.runtime.junit.ScenarioOutlineRunner.run(ScenarioOutlineRunner.java:53) at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63) at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70) at cucumber.api.junit.Cucumber.runChild(Cucumber.java:95) at cucumber.api.junit.Cucumber.runChild(Cucumber.java:38) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at cucumber.api.junit.Cucumber.run(Cucumber.java:100) at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283) at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173) at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128) at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203) at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
注释掉Report Portal核心依赖后,错误消失,Circle CI中能正常显示BDD报告,但Report Portal无测试数据,说明二者存在兼容性冲突。当前使用的Serenity依赖版本如下:
<!-- // net.serenity-bdd serenity-core--> <serenity.version>1.2.4</serenity.version> <serenity.maven.version>1.2.4</serenity.maven.version> <!-- // net.serenity-bdd serenity-cucumber--> <serenity.cucumber.version>1.1.27</serenity.cucumber.version>
解决方案
1. 降级Report Portal集成包版本
报错核心是serenity-reportportal-integration:1.5.8调用了Serenity 1.2.4不存在的TestStep.getStartTime()方法(返回类型为ZonedDateTime)。该集成包的1.3.x系列适配Serenity 1.x版本,可将依赖降级:
<dependency> <groupId>com.github.invictum</groupId> <artifactId>serenity-reportportal-integration</artifactId> <version>1.3.0</version> </dependency>
2. 升级Serenity版本到兼容层级
若项目允许升级,可将Serenity版本升级到支持serenity-reportportal-integration:1.5.8的2.x系列,同时同步升级serenity-cucumber版本保证依赖一致:
<serenity.version>2.9.0</serenity.version> <serenity.maven.version>2.9.0</serenity.maven.version> <serenity.cucumber.version>2.9.0</serenity.cucumber.version>
注意:升级后需验证原有测试用例是否正常运行,避免API变更带来的适配问题。
3. 排除集成包中的冲突依赖
若无法调整版本,可尝试排除serenity-reportportal-integration中引入的高版本Serenity依赖,强制使用当前1.2.4版本,但此方法可能导致集成包部分功能失效,需充分测试:
<dependency> <groupId>com.github.invictum</groupId> <artifactId>serenity-reportportal-integration</artifactId> <version>1.5.8</version> <exclusions> <exclusion> <groupId>net.serenity-bdd</groupId> <artifactId>serenity-core</artifactId> </exclusion> <exclusion> <groupId>net.serenity-bdd</groupId> <artifactId>serenity-cucumber</artifactId> </exclusion> </exclusions> </dependency>
内容的提问来源于stack exchange,提问作者paul
相关产品推荐
相关产品推荐

