ANT build tool
Creating a Session ID
Before running the build scan and tests, you need to create a session ID. The session ID is provided to each step in order to link them together as one complete cycle.
Generating a session ID in Java is done using the Java Build scanner with the -config
flag. This command can be executed as an ANT Java task.
<tstamp>
<format property="time.stamp" pattern="yyyyMMdd-HHmm"/>
</tstamp>
<target name="sealights_config">
<java jar="${sealights.dir}/sl-build-scanner.jar" fork="true">
<arg value="-config"/>
<arg value="-tokenfile"/>
<arg value="${sealights.dir}/sltoken.txt"/>
<arg value="-appname"/>
<arg value="myApp"/>
<arg value="-branchname"/>
<arg value="master"/>
<arg value="-buildname"/>
<arg value="${time.stamp}"/>
<arg value="-pi"/>
<arg value="*com.company.*"/>
</java>
</target>
In the sample code above, we have used a timestamp for the build name but any environment variable can be used according to your organization’s naming convention.
See 'Java Command Reference - Creating a session ID' for full parameter details
Scanning a build
In order to collect coverage information SeaLights, agents need to first scan the binary files for the build information: it can be the *.class
, *.jar
, or even the *.war
files.
Scanning a build in ANT is achieved using the Java Build scanner executed as an ANT Java task.
<target name="sealights_scan" depends="compile,sealights_config">
<java jar="${sealights.dir}/sl-build-scanner.jar" fork="true">
<arg value="-scan"/>
<arg value="-tokenfile"/>
<arg value="${sealights.dir}/sltoken.txt"/>
<arg value="-buildsessionidfile"/>
<arg value="buildSessionId.txt"/>
<arg value="-workspacepath"/>
<arg value="${build}"/>
<arg value="-r"/>
<arg value="-fi"/>
<arg value="*.class"/>
</java>
</target>
In order to add logs flags, you need to add the <jvmarg>
values like below
<jvmarg value="-Dsl.log.toConsole=true"/>
<jvmarg value="-Dsl.log.level=info"/>
See 'Java Command Reference - Scanning a build' for full parameter details
Running tests using JUnit
In order to capture code coverage information from tests run with JUnit, you need to run it with our test listener as a Java agent.
JUnit 4.x
The listener needs to be passed using the
jvmarg
attribute-javaagent
parameter together with its required parameters.
<junit fork="yes">
<jvmarg value="-javaagent:${sealights.dir}/sl-test-listener.jar"/>
<jvmarg value="-Dsl.tokenFile=${sealights.dir}/sltoken.txt"/>
<jvmarg value="-Dsl.buildSessionIdFile=buildSessionId.txt"/>
<jvmarg value="-Dsl.testStage=Unit Tests"/>
</junit>
JUnit 5.x
When tests are running in the same process, the listener needs to be passed using the
jvmarg
attribute-javaagent
parameter with Sealights' Anonymous Execution mode deactivated.When tests are running in a different process (via a fork), we need to add the
start
andend
commands before and after tests execution
Same process (not forked) | Different process (forked) |
---|---|
<junitlauncher>
<testclasses outputdir="build/test-report">
<jvmarg value="-javaagent:${sealights.dir}/sl-test-listener.jar"/>
<jvmarg value="-Dsl.tokenFile=${sealights.dir}/sltoken.txt"/>
<jvmarg value="-Dsl.buildSessionIdFile=buildSessionId.txt"/>
<jvmarg value="-Dsl.anonymousExecution=false"/>
<jvmarg value="-Dsl.testStage=Unit Tests"/>
</testclasses>
...
</junitlauncher> | <target name="test.junit.launcher" depends="compile">
<java jar="${sealights.dir}/sl--test-listener.jar" fork="true">
<arg value="start"/>
<arg value="-tokenfile"/>
<arg value="${sealights.dir}/sltoken.txt"/>
<arg value="-buildsessionidfile"/>
<arg value="buildSessionId.txt"/>
<arg value="-testStage"/>
<arg value="Unit Tests"/>
</java>
<junitlauncher haltOnFailure="true" printSummary="true">
<classpath refid="test.classpath"/>
<testclasses outputdir="build/test-report">
<fork>
<jvmarg value="-javaagent:${sealights.dir}/sl--test-listener.jar"/>
<jvmarg value="-Dsl.tokenFile=${sealights.dir}/sltoken.txt"/>
<jvmarg value="-Dsl.buildSessionIdFile=buildSessionId.txt"/>
<jvmarg value="-Dsl.testStage=Unit Tests"/>
</fork>
</testclasses>
</junitlauncher>
<java jar="${sealights.dir}/sl--test-listener.jar" fork="true">
<arg value="end"/>
<arg value="-tokenfile"/>
<arg value="${sealights.dir}/sltoken.txt"/>
<arg value="-buildsessionidfile"/>
<arg value="buildSessionId.txt"/>
</java>
</target> |
See 'Java Command Reference - Installing test listener as Java Agent' for full parameter details
Sample integration into an existing ANT project
In order to keep backward compatibility, you can use the ant:if
condition to execute Sealights commands according to a boolean.
In the sample below, you’ll be required to add -Dsealights=true
to your ANT command in order to enable the agents.
The sample below does not contain the command themselves for clarity. Please replace the <echo>
lines with commands explained in previous sections.
<project name="sl-ant-sample" xmlns:if="ant:if">
<target name="compile">
<echo>Compiling the JAR</echo>
<antcall if:true="${sealights}" target="sealights_scan" />
</target>
<target name="sealights_config">
<echo>Sealights -- Create BSID</echo>
</target>
<target name="sealights_scan" depends="sealights_config">
<echo>Sealights -- Scan artefacts</echo>
</target>
<target name="junit">
<echo if:true="${sealights}">Sealights -- Add JVM arg</echo>
<echo>Regular</echo>
</target>
</project>
Here is a comparison of executions with and without the sealigths
parameter set to true
.