0

我想开发一个独立的测试解决方案,jar它可以在 CI/CD 环境中使用,而无需一直重新编译。因此,我从一个包含几个库、一个 Spring Boot 应用程序和一个名为test-runner.

从 GitLab CI/CD 中执行 fat-jar 是可行的,但我认为这只是它的前半部分。我想生成一个 JUnit XML 报告来输出测试结果。我从研究中了解到,我必须实现自己的记者。有没有更完整的例子?

测试跑者

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));
    }
}

背景:我的测试解决方案是通用的,并使用配置文件来参数化测试。所有测试与被测系统并行运行。因此,在此尝试之前,调用所有 gitlab-jobsmvn test来执行测试并生成报告,但它每次运行都会重新编译所有内容。我想加快速度。

4

2 回答 2

0

要生成 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中找到

于 2021-06-29T18:06:48.743 回答
0

您可以使用控制台启动器生成 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
于 2021-04-20T15:17:51.963 回答