Mohit Arora
Mohit Arora

Reputation: 347

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?

Upvotes: 0

Views: 445

Answers (1)

Chad Nouis
Chad Nouis

Reputation: 7041

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

Upvotes: 1

Related Questions