Reputation: 17134
During the maven build process I start my app using the process-exec-maven-plugin
and run Integration tests with Failsafe. Now I want to get coverage data from the application under test.
The problem is, that the coverage report contains all the classes of my application but no coverage data (0% for all). When I append the jacoco agent to the failsafe plugin, it generates the code coverage for the test-classes which does not really help.
Any Ideas?
process-exec-maven-plugin configuration:
<plugin>
<groupId>com.bazaarvoice.maven.plugins</groupId>
<artifactId>process-exec-maven-plugin</artifactId>
<executions>
<execution>
<id>start-importer</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
<configuration>
<name>product-importer</name>
<waitForInterrupt>false</waitForInterrupt>
<healthcheckUrl>http://localhost:${jetty.http.port}/health</healthcheckUrl>
<arguments>
<argument>${java.home}/../bin/java</argument>
<argument>${failsafe.argLine}</argument>
<argument>-jar</argument>
<argument>
${project.build.directory}/jars/app-${project.version}-shaded.jar
</argument>
</arguments>
</configuration>
</execution>
<!--Stop all processes in reverse order-->
<execution>
<id>stop-all</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop-all</goal>
</goals>
</execution>
</executions>
</plugin>
Using the following Jacoco configuration:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<executions>
<execution>
<id>prepare-jacoco-service-test-agent</id>
<!-- default pre-integration is to late for the process-exec-maven-plugin -->
<phase>package</phase>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
<configuration>
<propertyName>failsafe.argLine</propertyName>
<includes>
<include>de.myapp.*</include>
</includes>
<classDumpDir>${project.build.outputDirectory}</classDumpDir>
<destFile>${project.build.directory}/coverage-reports/jacoco-it.exec</destFile>
<append>true</append>
</configuration>
</execution>
<execution>
<id>report-jacoco-service-test-results</id>
<goals>
<goal>report-integration</goal>
</goals>
<phase>verify</phase>
<configuration>
<dataFile>${project.build.directory}/coverage-reports/jacoco-it.exec</dataFile>
<outputDirectory>${project.build.directory}/coverage-reports/out/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
Upvotes: 1
Views: 1797
Reputation: 1586
In my case the problem was that the server was gone together with the docker container in "HW power off" style - there was no signal like SIGTERM on which depends output of JaCoCo (end of the JVM running in docker container).
When I add command "killall java" that docker runs inside the docker container and a small pause before the shutdown of the container, the exec file is alright.
Upvotes: 0