How can I take an IntelliJ generated ant build and incorporate my project's unit tests? I would like to incorporate Hudson into my development process.
Edit the build.xml to include the <junit> and <junitreport> tasks.
<target name="junit-test" description="run all junit tests" depends="compile">
<!-- Debug output
<property name="test.class.path" refid="test.class.path"/>
<echo message="${test.class.path}"/>
-->
<junit printsummary="yes" haltonfailure="${haltonfailure}">
<classpath refid="test.class.path"/>
<formatter type="xml"/>
<batchtest fork="yes" todir="${junit.out}">
<fileset dir="${test.src}">
<include name="**/*Test.java"/>
</fileset>
</batchtest>
</junit>
<junitreport todir="${junit.out}">
<fileset dir="${junit.out}">
<include name="TEST-*.xml"/>
</fileset>
<report todir="${junit.out}" format="frames"/>
</junitreport>
</target>
Related
I have multiple projects and I am currently trying to set some configuration parameters for junit in ant. However I have trouble doing so.
Is there a way to set junit configuration parameters in ant? For example I try to set junit.jupiter.execution.parallel.enabled=true but I am not sure which tag to use.
<project>
<property name="output.dir" value="${basedir}/build"/>
<property name="src.test.dir" value="${basedir}/src/test"/>
<property name="build.classes.dir" value="${output.dir}/classes"/>
<target name="init">
<mkdir dir="${output.dir}"/>
</target>
<path id="junit.platform.libs.classpath">
<fileset dir="${basedir}/src/lib/junit-platform/"/>
</path>
<path id="junit.engine.jupiter.classpath">
<fileset dir="${basedir}/src/lib/jupiter/"/>
</path>
<target name="compile-test" depends="init">
<mkdir dir="${build.classes.dir}"/>
<javac srcdir="${src.test.dir}"
destdir="${build.classes.dir}">
<!-- our tests only need JUnit Jupiter engine
libraries in our compile classpath for the tests -->
<classpath refid="junit.engine.jupiter.classpath"/>
</javac>
</target>
<target name="test" depends="compile-test">
<junitlauncher>
<!-- include the JUnit platform related libraries
required to run the tests -->
<classpath refid="junit.platform.libs.classpath"/>
<!-- include the JUnit Jupiter engine libraries -->
<classpath refid="junit.engine.jupiter.classpath"/>
<classpath>
<!-- the test classes themselves -->
<pathelement location="${build.classes.dir}"/>
</classpath>
<testclasses outputdir="${output.dir}">
<fileset dir="${build.classes.dir}"/>
<listener type="legacy-brief" sendSysOut="true"/>
<listener type="legacy-xml" sendSysErr="true" sendSysOut="true"/>
</testclasses>
</junitlauncher>
</target>
It's been a long long time, but pretty sure you don't do this in ant. Put
junit.jupiter.execution.parallel.enabled=true in src/test/resources/junit-platform.properties and commit it.
Currently, I am running Junit from Ant.
My environment variable JAVA_HOME is set to /path-to-jdk6 but I want the JUnit tests to run with /path-to-jdk8.
How do I set that?
This is my Ant target:
<target name="junit" depends="compile">
<junit printsummary="yes"
haltonfailure="no">
<classpath> <path refid="sample-classpath" /> </classpath>
<formatter type="plain" usefile="false" />
<batchtest todir="${junit.report.dir}">
<fileset dir="${build.classes.dir}">
<include name="**/*Test.class" />
</fileset>
</batchtest>
</junit>
</target>
You could wrap your JUnit task in a separate Ant exec task like so:
<macrodef name="exec-junit">
<attribute name="antfile" default="${ant.file}" />
<sequential>
<exec executable="ant">
<env key="JAVACMD" value="/path/to/jvm/1.8/bin/java" />
<arg line='-f "#{antfile}"' />
<arg line="junit" />
</exec>
</sequential>
</macrodef>
This uses the JAVACMD environment variable ...
JAVACMD - full path of the Java executable. Use this to invoke a different JVM than JAVA_HOME/bin/java(.exe).
The above target can then be invoked like so:
<target name="test">
<exec-junit/>
</target>
I am trying to run my testsuite using ant, for reporting I am using ant.
I did a lot of tries but unable to get the reports. My test suite is running properly, but my Junit report all values are 0.
My Build xml file
<?xml version="1.0"?>
<project basedir="." default="testreport" name="Automation">
<property name="results.dir" value="D:/airline.com/NDC_Automation/API/Results"/>
<property name="reports.dir" value="${results.dir}/Reports"/>
<property name="html.dir" value="${reports.dir}/html"/>
<property name="proj.dir" value="D:/airline.com/NDC_Automation/Project/ADC-NDC-SB8-soapui-project.xml"/>
<target name="testsuite1">
<exec dir="." executable="D:/SoapUI-5.2.1/bin/testrunner.bat">
<arg line="-r -j -a -f ${results.dir} -sDAC-3728 ${proj.dir}"/>
</exec>
</target>
<target name="testreport" depends="testsuite1">
<mkdir dir="${reports.dir}"/>
<junitreport todir="${reports.dir}">
<fileset dir="${results.dir}">
<include name="TEST-*.XML"/>
</fileset>
<report format="frames" todir="${html.dir}">
</report>
</junitreport>
</target>
</project>
I followed another post from stackoveflowTHIS POST and followed the steps mentioned in it as well. But still my junit report is empty.
My TESTS-TestSuites.XML
<?xml version="1.0" encoding="UTF-8" ?>
<testsuites />
Is my build file correct or have i missed any important tag ?
I am running a SoapUI project using Ant to get a JUnit report.
Here is my build.xml:
<project basedir="." default="testreport" name="APIAutomation">
<target name="SoapUI">
<exec dir="." executable="C:\Program Files (x86)\SmartBear\SoapUI-5.0.0\bin\testrunner.bat">
<arg line="-r -j -a -f 'C:\Users\F3020722\Desktop\Notification\New folder' -sFirstLoginTest 'C:\Users\F3020722\Desktop\Notification\New folder\APIRegression.xml'"></arg>
</exec>
</target>
<target name="testreport" depends="SoapUI">
<junitreport todir="C:\Users\F3020722\Desktop\Notification\New folder\API">
<fileset dir="C:\Users\F3020722\Desktop\Notification\New folder\API">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames"
todir="C:\Users\F3020722\Desktop\Notification\New folder\reports\html">
</report>
</junitreport>
</target>
</project>
I am getting an XML report properly. However, the JUnit report is empty. all contains 0 and successrate is Nan.
Can anyone check the build.xml is correct?
Looks build script seems ok
Avoid spaces in the directory names
Use forward slashes like unix style even on windows
Use property file or properties in build script so that other members do not have it edit the build scripts as paths might change machine to machine.
For now, added properties in the below script, you may externalize to a property file too.
build.xml
<project basedir="." default="testreport" name="APIAutomation">
<property name="test.suite" value="FirstLoginTest"/>
<property name="soapui.project" value="C:/Users/F3020722/Desktop/Notification/New folder/APIRegression.xml"/>
<property name="soapui.home" value="C:/Program Files (x86)/SmartBear/SoapUI-5.0.0"/>
<property name="results.dir" value="C:/Users/F3020722/Desktop/Notification/API/Results"/>
<property name="reports.dir" value="${results.dir}/Reports"/>
<property name="html.dir" value="${reports.dir}/html"/>
<target name="execute.project">
<exec dir="${soapui.home}/bin" executable="testrunner.bat">
<arg line="-raj -f ${results.dir} -s ${test.suite} ${soapui.project}" />
</exec>
</target>
<target name="testreport" depends="execute.project">
<mkdir dir="${reports.dir}"/>
<junitreport todir="${reports.dir}">
<fileset dir="${results.dir}">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="${html.dir}" />
</junitreport>
</target>
</project>
You can also find a docker image for soapui and run tests & generate junit style html report as well. Refer soapui repository # hub.docker.com
Note: that build script used docker images is exactly the same as above except the machine path.
I have got the below build.xml
<?xml version="1.0" encoding="UTF-8"?
<project name="Sample" default="coverage" basedir=".">
<property file="build.properties" />
<path id="cobertura.classpath">
<fileset dir="lib">
<include name="**/*.jar" />
</fileset>
</path>
<taskdef classpathref="cobertura.classpath" resource="tasks.properties"/>
<target name="init">
<mkdir dir="${classes.dir}" />
<mkdir dir="${instrumented.dir}" />
<mkdir dir="${reports.xml.dir}" />
<mkdir dir="${reports.html.dir}" />
<mkdir dir="${coverage.xml.dir}" />
<mkdir dir="${coverage.summaryxml.dir}" />
<mkdir dir="${coverage.html.dir}" />
</target>
<target name="compile" depends="init">
<javac srcdir="${src.dir}" destdir="${classes.dir}" debug="yes" includeantruntime="false">
<classpath refid="cobertura.classpath" />
</javac>
</target>
<target name="instrument" depends="init,compile">
<!--
Remove the coverage data file and any old instrumentation.
-->
<delete file="cobertura.ser" />
<delete dir="${instrumented.dir}" />
<!--
Instrument the application classes, writing the
instrumented classes into ${build.instrumented.dir}.
-->
<cobertura-instrument todir="${instrumented.dir}" datafile="cobertura.ser">
<!--
The following line causes instrument to ignore any
source line containing a reference to log4j, for the
purposes of coverage reporting.
-->
<ignore regex="org.apache.log4j.*" />
<fileset dir="${classes.dir}">
<!--
Instrument all the application classes, but
don't instrument the test classes.
-->
<include name="**/*.class" />
<exclude name="**/*Test.class" />
</fileset>
</cobertura-instrument>
</target>
<target name="test" depends="init,compile">
<echo>${basedir}\cobertura.ser</echo>
<junit fork="yes" dir="test" showoutput="yes" printsummary="yes" reloading="false">
<sysproperty key="net.sourceforge.cobertura.datafile"
file="${basedir}\cobertura.ser" />
<!--
Note the classpath order: instrumented classes are before the
original (uninstrumented) classes. This is important.
-->
<classpath location="${instrumented.dir}" />
<classpath location="${classes.dir}" />
<!--
The instrumented classes reference classes used by the
Cobertura runtime, so Cobertura and its dependencies
must be on your classpath.
-->
<classpath refid="cobertura.classpath" />
<formatter type="xml" />
<test name="${testcase}" todir="${reports.xml.dir}" if="testcase" />
<batchtest todir="${reports.xml.dir}" unless="testcase">
<fileset dir="test">
<include name="**/*Test.java" />
</fileset>
</batchtest>
</junit>
<!-- JUnit Report in HTML -->
<junitreport todir="${reports.xml.dir}">
<fileset dir="${reports.xml.dir}">
<include name="TEST-*.xml" />
</fileset>
<report format="frames" todir="${reports.html.dir}" />
</junitreport>
</target>
<target name="coverage-check">
<cobertura-check branchrate="34" totallinerate="100" />
</target>
<target name="coverage-report">
<!--
Generate an XML file containing the coverage data using
the "srcdir" attribute.
-->
<cobertura-report srcdir="${src.dir}" destdir="${coverage.xml.dir}" format="xml" />
</target>
<target name="summary-coverage-report">
<!--
Generate an summary XML file containing the coverage data using
the "srcdir" attribute.
-->
<cobertura-report srcdir="${src.dir}" destdir="${coverage.summaryxml.dir}" format="summaryXml" />
</target>
<target name="alternate-coverage-report">
<!--
Generate a series of HTML files containing the coverage
data in a user-readable form using nested source filesets.
-->
<cobertura-report destdir="${coverage.html.dir}">
<fileset dir="${src.dir}">
<include name="**/*.java"/>
</fileset>
</cobertura-report>
</target>
<target name="clean" description="Remove all files created by the build/test process.">
<delete dir="${classes.dir}" />
<delete dir="${instrumented.dir}" />
<delete dir="${reports.dir}" />
<delete file="cobertura.log" />
<delete file="cobertura.ser" />
</target>
<target name="coverage" depends="compile,instrument,test,coverage-report,summary-coverage-report,alternate-coverage-report" description="Compile, instrument ourself, run the tests and generate JUnit and coverage reports."/>
</project>
But i am when i run the build, i am getting 0% coverage.
Till instrument target i believe everything looks fine. But when build runs the Test target the tests are failing. Not sure why this is happening. If i run the Tests outside the ant its succeed.
Any suggestions where i can look to troubleshoot this issue?
I get below error when i run the test target
test:
[junit] Running org.jtaddeus.playground.LogicTest
[junit] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.141 sec
[junit] Test org.jtaddeus.playground.LogicTest FAILED
[junit] Running org.jtaddeus.playground.ValidatorTest
[junit] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.14 sec
[junit] Test org.jtaddeus.playground.ValidatorTest FAILED
Finally i found an solution (not answer)
After tracing the Junit report i found its something to do with Junit dependency.
I just removed the Junit-4 Library from the build path and added Junit-4.7.jar to Build path And you know what it worked..
If any one explain me why this happen i would be very thankful.
If i use Junit-4.11.jar again same failure. The Junit error in the report says error message="org/hamcrest/SelfDescribing" type="java.lang.NoClassDefFoundError">java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing