生成供JUnit报告使用的XML文件

qqrboqgw  于 2022-11-11  发布在  其他
关注(0)|答案(5)|浏览(389)

我想创建由JUnit / TestNG以编程方式生成的测试报告。所以,这就排除了ANT。我主要关心的是在执行测试用例时生成由JUnit创建的XML文件。我已经读到RunListener可以帮助我实现这一点,但我还没有弄清楚如何实现?我正在使用Selenium来创建我的测试用例。
如何生成由JUnit创建的XML文件?

at0kjp5o

at0kjp5o1#

JUnit不生成XML报告。JUnit没有标准的XML输出格式。
其他工具生成XML,比如Ant/Maven,所以首先要做的是决定需要哪种形式的XML文件,比如创建文件后要如何处理这些文件。
而且,实际上,您对编程的限制并不排除ANT。您可以通过编程方式调用ant(请参阅Invoke ant from java, then return to java after ant termination)。这可能是生成与ANT兼容的文件的最简单方法。
如果您希望创建自己的XML文件,那么您可以创建一个扩展RunListener的类,然后通过调用JUnitCore#run()或类似方法来运行测试。

public void main(String... args) {
    JUnitCore core= new JUnitCore();
    core.addListener(new RingingListener());
    core.run(MyTestClass.class);
}

您的RunListener只会发出适当的XML,这很容易理解:重写testRunStarted()等方法并写出XML。有关它如何工作的示例,请参见TextListener,它做了同样的事情,但针对的是文本。

djmepvbi

djmepvbi2#

xml文件由ant-junit生成,我们可以通过程序来完成,代码如下所示:

Project project = new Project();
JUnitTask task = new JUnitTask();
project.setProperty("java.io.tmpdir",String); //set temporary directory
task.setProject(project);
JUnitTask.SummaryAttribute sa = new JUnitTask.SummaryAttribute();
sa.setValue("withOutAndErr");
task.setFork(false);
task.setPrintsummary(sa);
FormatterElement formater = new FormatterElement();         
FormatterElement.TypeAttribute type = new FormatterElement.TypeAttribute();
type.setValue("xml");
formater.setType(type);
task.addFormatter(formater);
JUnitTest test = new JUnitTest(String);// set Test.class.getname()          
test.setTodir(File); // set Location for your report
task.addTest(test);         
task.execute();
vaj7vani

vaj7vani3#

正如前面提到的,JUnit不生成报告,但是如果使用Maven,执行mvn clean install test surefire-report:report就可以了
https://examples.javacodegeeks.com/core-java/junit/junit-report-generation-example/

bogh5gae

bogh5gae4#

您在这里问的问题几乎相同。如果您查看TestNG文档,您可以用途:
只有一个方法的org.testng.IReporter接口:public void generateReport(List suites,String outputDirectory)当所有的suites都运行完之后,TestNG会调用这个方法,你可以检查它的参数来访问刚刚完成的运行的所有信息。

bqf10yzr

bqf10yzr5#

我找到了一个办法。

LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
    .selectors(
        selectPackage("com.example.mytests"),
        selectClass(MyTestClass.class)
    )
    .filters(
        includeClassNamePatterns(".*Tests")
    )
    .build();

LegacyXmlReportGeneratingListener listener = new LegacyXmlReportGeneratingListener(
                Path.of("."), new PrintWriter(System.out));

try (LauncherSession session = LauncherFactory.openSession()) {
    Launcher launcher = session.getLauncher();
    // Register a listener of your choice
    launcher.registerTestExecutionListeners(listener);
    // Discover tests and build a test plan
    TestPlan testPlan = launcher.discover(request);
    // Execute test plan
    launcher.execute(testPlan);
    // Alternatively, execute the request directly
    launcher.execute(request);
}

将以下内容添加到pom.xml中:

<!-- For LauncherSession -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>1.9.0</version>
        </dependency>
        <!-- For LegacyXmlReportGeneratingListener -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-reporting</artifactId>
            <version>1.9.0</version>
        </dependency>

在运行时,这将创建一个标准JUnit格式的文件TEST-junit-jupiter.xml
参考文献:

相关问题