/junitreport

JUnit report for TestNG executions

Primary LanguageJavaApache License 2.0Apache-2.0

JUnit Report

This is a reporter for TestNG which generates the reports in xml format adhering to the JUnit test result schema for the Apache Ant JUnit and JUnitReport tasks.

The schema being used is referred from the GitHub repository: JUnit-Schema.

To get started, just add the following as a maven dependency:

<dependency>
    <groupId>com.rationaleemotions</groupId>
    <artifactId>junitreport</artifactId>
    <version>1.0.0</version>
</dependency>

Merely adding this artifact as a dependency should suffice. Service loader mechanism is used to wire in this listener. So there is no need to explicitly add the listener via the <listener> tag (or) via the @Listeners annotation.

Here's a sample of how a generated report can look like:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<testsuite name="SecondTest" timestamp="2017-07-29T20:16:12.846+05:30" hostname="necropolis.local" tests="4"
           failures="1" errors="2">
    <properties>
        <property name="errors" value="2"/>
        <property name="failures" value="1"/>
        <property name="ignored" value="0"/>
    </properties>
    <testcase name="@BeforeClass beforeClass" classname="com.rationaleemotions.AnotherApp" time="1"/>
    <testcase name="passTestMethod" classname="com.rationaleemotions.AnotherApp" time="5001"/>
    <testcase name="failTestMethod" classname="com.rationaleemotions.AnotherApp" time="2">
        <failure message="Simulating a failure" type="java.lang.AssertionError"/>
    </testcase>
    <testcase name="errorTestMethod" classname="com.rationaleemotions.AnotherApp" time="1">
        <error message="ERRORED due to : Simulating a failure" type="java.lang.RuntimeException">
            java.lang.RuntimeException: Simulating a failure
            at com.rationaleemotions.AnotherApp.errorTestMethod(AnotherApp.java:31)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)
            at org.testng.internal.Invoker.invokeMethod(Invoker.java:661)
            at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869)
            at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193)
            at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
            at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
            at org.testng.TestRunner.privateRun(TestRunner.java:744)
            at org.testng.TestRunner.run(TestRunner.java:602)
            at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
            at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
            at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
            at org.testng.SuiteRunner.run(SuiteRunner.java:289)
            at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
            at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
            at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
            at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
            at org.testng.TestNG.runSuites(TestNG.java:1144)
            at org.testng.TestNG.run(TestNG.java:1115)
            at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
            at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)
        </error>
    </testcase>
    <testcase name="skipTestMethod" classname="com.rationaleemotions.AnotherApp" time="0">
        <error message="SKIPPED due to : Method AnotherApp.skipTestMethod()[pri:0, instance:com.rationaleemotions.AnotherApp@483bf400] depends on not successfully finished methods"
               type="java.lang.Throwable">java.lang.Throwable: Method AnotherApp.skipTestMethod()[pri:0,
            instance:com.rationaleemotions.AnotherApp@483bf400] depends on not successfully finished methods
            at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1084)
            at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
            at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
            at org.testng.TestRunner.privateRun(TestRunner.java:744)
            at org.testng.TestRunner.run(TestRunner.java:602)
            at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
            at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
            at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
            at org.testng.SuiteRunner.run(SuiteRunner.java:289)
            at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
            at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
            at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
            at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
            at org.testng.TestNG.runSuites(TestNG.java:1144)
            at org.testng.TestNG.run(TestNG.java:1115)
            at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
            at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)
        </error>
    </testcase>
    <system-out>Test message from beforeClass()
        Test message from testMethod()
    </system-out>
</testsuite>