As an aggregator, the Jtest Plugin form Maven must be executed only once during the build. We recommend configuring the jtest
goal execution directly from command line or as a reporting plugin.
You do not need to build a project before running analysis, but we recommend compiling multi-module projects beforehand. Doing so enables Jtest to use artifacts from the local repository, reducing the amount of time necessary to test and analyze code.
Before you run analysis or collect coverage information with Maven, ensure that the Jtest license is properly configured (see Setting the License). |
To perform static analysis on your code:
Execute the jtest:jtest goal. Your command line may resemble the following:
mvn jtest:jtest |
The Jtest Plugin for Maven will collect the necessary build data in the .json file, and analyze your code depending on the configuration you provided (see Configuring Jtest Execution).
If Jtest reports compilation problems related to importing dependencies in the Maven test scope, try running the jtest:jtest
goal with the mvn test
command:
mvn test jtest:jtest |
You can include unit test results in the Jtest report by running your tests with the jtest:jtest goal and the dedicated Unit Tests
built-in test configuration:
Execute the jtest:jtest goal with Maven. Your command line may resemble the following:
mvn clean test jtest:jtest -Djtest.config="builtin://Unit Tests" |
You can collect coverage information during execution of unit tests by your tests with the jtest:jtest and jtest:agent goals, and the dedicated Unit Tests
built-in test configuration:
Execute the jtest:agent and jtest:jtest goals Maven. Ensure that the tests and classes are compiled before the jtest:agent
goal is run. Your command line may resemble the following:
mvn clean test-compile jtest:agent test jtest:jtest -Djtest.config="builtin://Unit Tests" |
Executing the
jtest:agent
goal before the classes are compiled, may result in empty coverage. If your build uses Tycho plugins, or any other plugins that are detached from the default lifecycle, invoke the dedicated (non-default) compiler to ensure that the classes are properly compiled and coverage information is collected. Your command line may resemble the following:
mvn clean tycho-compiler:compile jtest:agent verify jtest:jtest -Djtest.config="builtin://Unit Tests" |
jtest:agent
GoalThe jtest:agent goal generates the Jtest agent settings based on the build modules, and sets the javaagent VM agument in the properties specified with the agentPropertyNames parameter in the initialize phase.
By default, it tries to inject javaagent VmArg
into maven-surefire-plugin
and eclipse-test-plugin
through specific properties.
Prerequisites for using the jtest:agent
goal with the Maven test plugins:
forkCount
or forkMode
)argLine
parameter)The jtest:agent
goal attempts to automatically configure the Maven test plugins (maven-surefire-plugin and tycho-surefire-plugin) by setting up the properties of their VmArgs
parameters (by default through the argLine and tycho.testArgLine properties). You can customize the default values of these parameters if one of the following ways:
Through the default property. The jtest:agent
goal will extend the properties with the Jtest javaagent VmArg
:
<project> <!-- ... --> <properties> <!-- argLine property which will be extended by jtest:agent goal ---> <argLine>-Xmx=1024m -XX:MaxPermSize=256m</argLine> </properties> <!-- ... --> <build> <plugins><!-- or pluginManagement --> <plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> <forkCount>1</forkCount> <!-- do not configure argLine parameter here --> </configuration> </plugin> </plugin> </build> </project> |
Through a parameter value with an injected custom property:
<project> <!-- ... --> <build> <plugins> <plugin> <groupId>com.parasoft.jtest</groupId> <artifactId>jtest-maven-plugin</artifactId> <version>1.2.15</version> <configuration> <!-- jtest:agent goal will set Jtest Java agent VmArg into properties below --> <agentPropertyNames>jtest.argLine</agentPropertyNames> <!-- optional coverage block with parameters identical as in offline coverage --> <coverage> <!-- ... --> </coverage> </configuration> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> <argLine>${jtest.argLine} -Xmx=1024m -XX:MaxPermSize=256m</argLine> </configuration> </plugin> </plugin> </build> </project> |
jtest:instrument
Goal (deprecated)We recommend using the |
You can collect coverage for unit tests by running the jtest:instrument goal, which instruments the .class files before test execution (in the process-test-classes phase). Your command line may resemble the following:
mvn clean test-compile jtest:instrument test jtest:jtest -Djtest.config="builtin://Unit Tests" |
Ensure that the primary reporting scope is wider than the instrumentation scope for coverage to be collected. You can customize the reporting scope with the resource
parameter. By default, everything is in scope.
<project> <!-- ... --> <build> <!-- ... --> <plugins> <!-- ... --> <plugin> <groupId>com.parasoft.jtest</groupId> <artifactId>jtest-maven-plugin</artifactId> <version>1.2.15</version> <configuration> <includes><!-- reporting scope configuration --> <!-- report coverage for all files in specified package --> <include>**/my/package/*</include> <includes> <coverage> <excludes> <!-- classes instrumentatio excludes --> <exclude>**/AnnotationProcessor.class</exclude> </excludes> <testExcludes> <!-- test classes instrumentation excludes --> <exclude>**/*Util.class</exclude> </testExcludes> </coverage> </configuration> </plugin> </plugins> </build> </project> |
If your build uses other plugins that instrument code (for example, aspectj), ensure that the Jtest Plugin for Maven is executed in the process-classes phase. To achieve this, explicitly configure the execution in the POM file:
<build> <!-- ... --> <plugins> <!-- other plugin that instruments the code --> <plugin> <groupId>com.parasoft.jtest</groupId> <artifactId>jtest-maven-plugin</artifactId> <version>1.2.15</version> <executions> <execution> <goals> <goal>instrument</goal> </goals> <phase>process-classes</phase> </execution> </executions> </plugin> </plugins> </build> |
Jtest's coverage agent allows you to collect coverage data during manual or automated tests performed on a running application. See Application Coverage for information about collecting application coverage with Jtest.
You can extend the capabilities of the Jtest Plugin for Maven with test impact analysis. It allows you to you to identify and re-run only the tests that are affected by your changes, eliminating the time and effort required to execute a large number of unaffected tests. To perform test impact analysis of your project, you need to:
cbt-maven-plugin
) shipped with Jtest to your Maven build.affected-tests
goal.In addition, the Jtest Plugin for Maven must be configured to ensure access to the Maven repository shipped with Jtest (see Initial Setup).
Test impact analysis requires customizing your Parasoft license settings. Ensure that the 'custom_edition' license with the 'Change Based Testing' and 'Automation' features is enabled in your jtest.properties file. |
Test impact analysis may require additional memory. We recommend increasing the memory allocated to the Maven build.
Jtest does not support test impact analysis for Maven parallel builds.
Jtest does not support excluding tests when the
runModifiedTests
option is set to true
(see Optional Parameters).
You can integrate with the test impact analysis plugin by adding cbt-maven-plugin
to the list of plugins in the POM file:
<build> <plugins> <plugin> <groupId>com.parasoft.xtest.cbt</groupId> <artifactId>cbt-maven-plugin</artifactId> <version>1.0.0</version> </plugin> </plugins> </build> |
You can customize test impact analysis of your project in the POM file or in the command line by configuring cbt-maven-plugin
. At minimum, you must provide the paths to the following files that are generated by Jtest during execution:
coverage.xml
report.xml
See Jtest Goals Reference for Maven for the complete list of available options.
If you configure the plugin in the POM file, you can add the cbt-maven-plugin
properties to:
plugin declaration
<plugin> <groupId>com.parasoft.xtest.cbt</groupId> <artifactId>cbt-maven-plugin</artifactId> <version>1.0.0</version> <configuration> <coverageFile>target/jtest/coverage.xml</coverageFile> <testFile>target/jtest/report.xml</testFile> <runFailingTests>false</runFailingTests> <runModifiedTests>true</runModifiedTests> <jtestHome>${jtest.home}</jtestHome> <settingsFiles>jtestcli.properties</settingsFiles> </configuration> </plugin> |
plugin execution
<plugin> <groupId>com.parasoft.xtest.cbt</groupId> <artifactId>cbt-maven-plugin</artifactId> <version>1.0.0</version> <executions> <execution> <goals> <goal>affected-tests</goal> </goals> <configuration> <coverageFile>target/jtest/coverage.xml</coverageFile> <testFile>target/jtest/report.xml</testFile> <runFailingTests>false</runFailingTests> <runModifiedTests>true</runModifiedTests> <jtestHome>${jtest.home}</jtestHome> <settingsFiles>jtestcli.properties</settingsFiles> </configuration> </execution> </executions> </plugin> |
Maven properties
<properties> <parasoft.coverage.file>target/jtest/coverage.xml</parasoft.coverage.file> <parasoft.test.file>target/jtest/report.xml</parasoft.test.file> <parasoft.runFailingTests>false</parasoft.runFailingTests> <parasoft.runModifiedTests>true</parasoft.runModifiedTests> <jtest.home>${env.JTEST_HOME}</jtest.home> <jtest.settings>jtestcli.properties</jtest.settings> </properties> |
If you customize test impact analysis in the command line, pass the cbt-maven-plugin
properties with the -D
switch. The properties must include the "parasoft" or "jtest" prefix (see Jtest Goals Reference for Maven for details). Your command line may resemble the following:
mvn cbt:affected-tests test -Dparasoft.coverage.file=target/jtest/coverage.xml -Dparasoft.test.file=target/jtest/report.xml -Dparasoft.runFailingTests=false -Dparasoft.runModifiedTests=true -Djtest.home=$JTEST_HOME -Djtest.settings=jtestcli.properties |
affected-tests
GoalYou can configure execution of the affected-tests
goal from the command line or by configuring the goal in the POM file.
When cbt-maven-plugin
is included in the Maven build file (see Integrating with the Test Impact Analysis Plugin), you can execute the cbt:affected-tests
goal from the command line. Ensure it is executed before the test
goal:
mvn cbt:affected-tests test |
You can configure execution of the affected-tests
goal in the build plugins or in the the build plugins of the profile.
If you include the affected-tests
goal in the build plugins:
<build> <plugins> <plugin> <groupId>com.parasoft.xtest.cbt</groupId> <artifactId>cbt-maven-plugin</artifactId> <version>1.0.0</version> <executions> <execution> <goals> <goal>affected-tests</goal> </goals> </execution> </executions> </plugin> </plugins> </build> |
it will be automatically executed with the Maven test
goal:
mvn test |
If you include the affected-tests
goal in the build plugins of the profile:
<profile> <id>cbt</id> <build> <plugins> <plugin> <groupId>com.parasoft.xtest.cbt</groupId> <artifactId>cbt-maven-plugin</artifactId> <version>1.0.0</version> <executions> <execution> <goals> <goal>affected-tests</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> |
you must execute the Maven test
goal using the profile:
mvn test -P cbt |