Search code examples
javajunitantant-junit

Calculate the total sum of JUnit tests executed by Ant


I have an Ant target which runs JUnit tests with <batchset>.

While running, the following is displayed:

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.497 sec

What I want is the total number of tests executed of all the classes combined. Any there an easy way to do this?


Solution

  • The <junit> task can output test results as XML files. These XML files can be processed with the free, third-party XmlTask library.

    First, under <junit>, add <formatter type="xml" usefile="true"/>:

    <junit>
        <formatter type="xml" usefile="true"/>
        <batchtest ... />
    </junit>
    

    Then <xmltask> can be used to combine the XML files and calculate the sums of the failures and errors:

    <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask" />
    
    <!-- Create a buffer named "testsuiteNode" that holds the -->
    <!-- <testsuite> nodes from the JUnit reports. -->
    <xmltask>
        <fileset includes="*.xml"/>
        <copy path="/testsuite" append="true" buffer="testsuiteNode"/>
    </xmltask>
    
    <!-- Create an XML document containing a single element: <root/>. -->
    <!-- Then insert the <testsuite> nodes under <root/> -->
    <!-- Then calculate the sums of the various errors and failures. -->
    <!-- Finally, store the sums in various properties. -->
    <xmltask>
        <insert path="/"><![CDATA[<root/>]]></insert>
        <insert path="/root" buffer="testsuiteNode"/>
        <copy path="sum(/root/testsuite/@errors)" property="test-errors-count"/>
        <copy path="sum(/root/testsuite/@failures)" property="test-failures-count"/>
        <copy path="sum(/root/testsuite/@errors | /root/testsuite/@failures)"
            property="test-failures-and-errors-count"/>
        <copy path="sum(/root/testsuite/@tests)" property="test-total-count"/>
    </xmltask>
    
    <echo>test-errors-count: ${test-errors-count}</echo>
    <echo>test-failures-count: ${test-failures-count}</echo>
    <echo>test-failures-and-errors-count: ${test-failures-and-errors-count}</echo>
    <echo>test-total-count: ${test-total-count}</echo>
    

    Sample Output

     [echo] test-errors-count: 1
     [echo] test-failures-count: 2
     [echo] test-failures-and-errors-count: 3
     [echo] test-total-count: 5