微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JUnit 5-如何通过执行JAR创建XML报告

如何解决JUnit 5-如何通过执行JAR创建XML报告

我想开发一个jar形式提供的独立测试解决方案,该解决方案可以在CI / CD环境中使用,而无需一直进行重新编译。 因此,我从一个包含多个库,一个spring-boot-application和一个名为test-runner的子模块的multi-maven模块中打包了一个胖子。

从gitlab ci / cd作品中执行fat-jar。但是我认为那只是前半部分。我想生成一个JUnit-XML-Report以输出测试结果。从我的研究中了解到,我将必须实现自己的记者。但是那里有一个更完整的例子吗?

测试运行器

public class Runner {
    SummaryGeneratingListener listener = new SummaryGeneratingListener();

    public void runOne() {
        LauncherdiscoveryRequest request = LauncherdiscoveryRequestBuilder.request()
                        .selectors(selectClass(MyTest.class)).build();
        Launcher launcher = LauncherFactory.create();
        TestPlan testPlan = launcher.discover(request);
        launcher.registerTestExecutionListeners(listener);
        launcher.execute(testPlan);
    }

    public static void resultReport(Result result) {
        System.out.println("Finished. Result: Failures: " + result.getFailureCount() + ". Ignored: "
                        + result.getIgnoreCount() + ". Tests run: " + result.getruncount() + ". Time: "
                        + result.getRunTime() + "ms.");
    }

    public static void main(String[] args) {
        Runner runner = new Runner();
        runner.runOne();
        TestExecutionSummary summary = runner.listener.getSummary();

        summary.printTo(new PrintWriter(System.out));
    }
}

背景: 我的测试解决方案是通用的,并且使用配置文件来参数化测试。所有测试并行运行,而不是被测系统。因此,在此尝试之前,所有名为mvn test的gitllab-jobs都要执行测试并生成报告。但是它会在每次运行时重新编译所有内容。我考虑过要加快速度。

解决方法

您可以使用控制台启动器生成 Junit5 xml 报告

java -jar junit-platform-console-standalone-1.6.2.jar @junitArgs.txt --reports-dir=reports

junitArgs.txt 文件包含以下信息:

-classpath fat jar path
--scan-classpath
,

要生成 XML 报告,您可以使用带有路径的 LegacyXmlReportGeneratingListener 将您的报告保存为第一个参数:

LegacyXmlReportGeneratingListener xmlListener = new LegacyXmlReportGeneratingListener(Paths.get("reports"),new PrintWriter(System.out));

在您的 runOne() 方法中,您需要相应地注册您的侦听器:

    public void runOne() {
        LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
                        .selectors(selectClass(MyTest.class)).build();
        Launcher launcher = LauncherFactory.create();
        TestPlan testPlan = launcher.discover(request);
        launcher.registerTestExecutionListeners(listener);
        launcher.registerTestExecutionListeners(xmlListener);
        launcher.execute(testPlan);
    }

这将在初始化期间传递给侦听器的文件夹中为每个测试根生成一个 XML 文件。 可以在 JavaDoc

中找到更多信息

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。