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

如何在Cucumber+TestNG(Java)中为不同Runner类生成独立Extent报告

解决方案

一、修复多Runner生成独立报告的问题

1. 拆分TestNG Suite执行

将多个Runner类分配到不同的TestNG Suite中,避免共享Cucumber运行上下文导致报告覆盖。修改testng.xml如下:

<suite name="Tag1-Suite">
    <test name="Tag1-Tests">
        <classes>
            <class name="your.package.Runner1"/>
        </classes>
    </test>
</suite>
<suite name="Tag2-Suite">
    <test name="Tag2-Tests">
        <classes>
            <class name="your.package.Runner2"/>
        </classes>
    </test>
</suite>

2. 手动初始化Extent报告

放弃仅通过@CucumberOptions配置插件,改为在Runner类中手动初始化Extent报告,确保每个Runner独立生成报告:

Runner1.java

@RunWith(Cucumber.class)
@CucumberOptions(
    features = "src/test/resources/features",
    glue = "your.package.stepdefs",
    tags = "@Tag1",
    plugin = {"pretty"} // 移除原Extent插件配置
)
public class Runner1 {
    @BeforeSuite
    public void initExtentReport() {
        // 初始化专属报告路径
        ExtentCucumberFormatter.initiateExtentReporter("target/cucumber-reports/report1.html");
        // 加载自定义配置(可选,需提前准备extent-config.xml)
        ExtentCucumberFormatter.loadConfig(new File("src/test/resources/extent-config.xml"));
    }
}

Runner2.java

@RunWith(Cucumber.class)
@CucumberOptions(
    features = "src/test/resources/features",
    glue = "your.package.stepdefs",
    tags = "@Tag2",
    plugin = {"pretty"}
)
public class Runner2 {
    @BeforeSuite
    public void initExtentReport() {
        ExtentCucumberFormatter.initiateExtentReporter("target/cucumber-reports/report2.html");
        ExtentCucumberFormatter.loadConfig(new File("src/test/resources/extent-config.xml"));
    }
}

二、解决报告体积过大无法上传JIRA的问题

1. 压缩截图体积

在截图逻辑中加入PNG压缩处理,降低单张截图大小:

// 示例:使用Thumbnails库压缩截图(需引入依赖)
Thumbnails.of(screenshotFile)
    .scale(0.8) // 缩放至原尺寸80%
    .outputQuality(0.6) // 输出质量60%
    .toFile(new File(targetPath));

若不想引入第三方库,可通过Java原生ImageIO调整图片参数实现压缩。

2. 按功能/标签拆分更小的报告

将600个场景进一步拆分,比如按业务模块划分成多个Runner(每个Runner对应200个以内场景),生成多个小体积报告,单个压缩包大小控制在JIRA允许范围内。

3. 避免报告嵌入截图

确保Extent报告使用外部截图引用而非Base64嵌入(旧版ExtentCucumberFormatter默认是外部引用),这样HTML文件本身体积不会过大,仅需压缩截图文件夹+报告文件即可。

4. 执行前清理旧文件

在Runner的@BeforeSuite中加入清理逻辑,删除target目录下旧的报告和截图,避免累积旧文件导致体积增大:

@BeforeSuite
public void cleanOldFiles() {
    File reportDir = new File("target/cucumber-reports");
    File screenshotDir = new File("target/screenshot");
    // 递归删除目录下所有文件
    deleteDir(reportDir);
    deleteDir(screenshotDir);
}

private boolean deleteDir(File dir) {
    if (dir.isDirectory()) {
        String[] children = dir.list();
        for (String child : children) {
            boolean success = deleteDir(new File(dir, child));
            if (!success) {
                return false;
            }
        }
    }
    return dir.delete();
}

内容的提问来源于stack exchange,提问作者BRD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:00:33