You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从info.cukes迁移至io.cucumber时ExtentReport集成失败求助

Cucumber迁移至io.cucumber 4.2.6后ExtentReport插件加载失败问题解决

我最近在把Cucumber自动化项目从旧的info.cukes版本迁移到io.cucumber 4.2.6版本时,碰到了ExtentReport插件加载失败的问题。先把我的配置、代码和报错贴出来,再说说怎么解决:

我的依赖配置(pom.xml)

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-java</artifactId>
    <version>4.2.6</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit</artifactId>
    <version>4.2.6</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-core</artifactId>
    <version>4.2.6</version>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-html</artifactId>
    <version>0.2.7</version>
</dependency>
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.26-incubating</version>
</dependency>
<dependency>
    <groupId>com.vimalselvam</groupId>
    <artifactId>cucumber-extentsreport</artifactId>
    <version>3.0.2</version>
</dependency>
<dependency>
    <groupId>com.aventstack</groupId>
    <artifactId>extentreports</artifactId>
    <version>4.0.9</version>
</dependency>

我的Runner类代码

package CucumberWithAfterStep.AfterStepPOC;
import java.io.File;
import org.junit.AfterClass;
import org.junit.runner.RunWith;
import com.cucumber.listener.Reporter;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(
    features = "src/test/resources/features",
    glue = { "testSteps" },
    plugin = { "pretty", "html:target/cucumber", "json:target/cucumber.json" , "com.cucumber.listener.ExtentCucumberFormatter:target/cucumber-reports/report.html" },
    monochrome = true,
    tags = {"@WAC003 "},
    dryRun = false
)
public class MainRunnerTest {
    @AfterClass
    public static void writeExtentReport() {
        Reporter.loadXMLConfig(new File(FileReaderManager.getInstance().getConfigReader().getReportConfigPath()));
    }
}

报错信息

cucumber.runtime.CucumberException: Couldn't load plugin class: com.cucumber.listener.ExtentCucumberFormatter. It does not implement cucumber.api.Plugin
at cucumber.runtime.formatter.PluginFactory.loadClass(PluginFactory.java:176)
at cucumber.runtime.formatter.PluginFactory.pluginClass(PluginFactory.java:163)
at cucumber.runtime.formatter.PluginFactory.getPluginClass(PluginFactory.java:220)
at cucumber.runtime.formatter.PluginFactory.isStepDefinitionReporterName(PluginFactory.java:203)
at cucumber.runtime.RuntimeOptions$ParsedPluginData.addPluginName(RuntimeOptions.java:386)
at cucumber.runtime.RuntimeOptions.parse(RuntimeOptions.java:165)
at cucumber.runtime.RuntimeOptions.(RuntimeOptions.java:108)

问题核心原因

这个报错的本质是依赖版本不兼容:

  • 你用的com.vimalselvam:cucumber-extentsreport:3.0.2是为旧版Cucumber(info.cukes)开发的,它的ExtentCucumberFormatter实现的是旧的cucumber.api.Plugin接口;
  • 而io.cucumber 4.2.6版本的插件接口已经升级为io.cucumber.plugin.Plugin,旧插件类无法被新版本识别。

解决步骤

1. 升级cucumber-extentsreport依赖

把cucumber-extentsreport版本换成适配io.cucumber的4.0.0,这个版本刚好和你当前的ExtentReports 4.0.9匹配:

<dependency>
    <groupId>com.vimalselvam</groupId>
    <artifactId>cucumber-extentsreport</artifactId>
    <version>4.0.0</version>
</dependency>

2. 修改Runner类中的插件路径

将原来的旧插件类com.cucumber.listener.ExtentCucumberFormatter替换为新版本的适配器类:

@CucumberOptions(
    // 其他配置保持不变
    plugin = { "pretty", "html:target/cucumber", "json:target/cucumber.json" , "com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter:target/cucumber-reports/report.html" },
    // 其他配置保持不变
)

3. 替换Reporter类并修改报告配置代码

旧的com.cucumber.listener.Reporter在新版本中已被弃用,改用com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter加载配置:

package CucumberWithAfterStep.AfterStepPOC;
import java.io.File;
import org.junit.AfterClass;
import org.junit.runner.RunWith;
import com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(
    features = "src/test/resources/features",
    glue = { "testSteps" },
    plugin = { "pretty", "html:target/cucumber", "json:target/cucumber.json" , "com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter:target/cucumber-reports/report.html" },
    monochrome = true,
    tags = {"@WAC003 "},
    dryRun = false
)
public class MainRunnerTest {
    @AfterClass
    public static void writeExtentReport() {
        ExtentCucumberAdapter.loadXMLConfig(new File(FileReaderManager.getInstance().getConfigReader().getReportConfigPath()));
        // 还可以在这里添加自定义系统信息,比如:
        // ExtentCucumberAdapter.addSystemInfo("Environment", "QA");
        // ExtentCucumberAdapter.addSystemInfo("Browser", "Chrome");
    }
}

4. 可选:升级JUnit版本

你当前用的JUnit 3.8.1过于老旧,建议升级到JUnit 4.13.2,和Cucumber 4.2.6兼容性更好:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
</dependency>

完成这些修改后,重新运行测试,ExtentReport应该就能正常生成了。

内容的提问来源于stack exchange,提问作者Anil Kumar P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:26:04