我有一个项目使用货物插件激活tomcat,然后对该tomcat实例运行集成测试。我的目标是获得在tomcat中运行的代码的集成测试覆盖率报告(不是我的集成测试的覆盖范围)。
问题是,如何获得在tomcat(单独的JVM)中运行的代码的代码覆盖率结果?
我已经能够获得集成测试本身和测试模块中的java类的覆盖报告,但是这些报告相当没用。
在jacoco-sessions.html文件中,我只能看到测试模块的类路径中可用的类。在tomcat服务器中运行的类不存在。
答案 0 :(得分:0)
根据jacoco-maven-plugin
http://www.jacoco.org/jacoco/trunk/doc/prepare-agent-mojo.html的文档:
准备一个指向JaCoCo运行时代理的属性,该属性可以作为VM参数传递给被测试的应用程序。默认情况下,根据项目打包类型设置具有以下名称的属性:
tycho.testArgLine
用于包装类型eclipse-test-plugin和argLine
否则。
argLine
属性会影响使用测试启动JVM的maven-surefire-plugin
和maven-failsafe-plugin
- 请分别参阅http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#argLine和http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html#argLine,但此属性对{{{{}}不起作用1}}用Tomcat启动JVM。
根据https://stackoverflow.com/a/38435778/244993和https://codehaus-cargo.github.io/cargo/Tomcat+9.x.html,您需要将cargo-maven2-plugin
设置的属性传递给jacoco-maven-plugin
cargo-maven2-plugin
。
答案 1 :(得分:0)
除了the answer of Godin外,您还必须确保测试类的coverage数据本身不使用与在货柜中运行的代码的coverage数据相同的输出文件。我认为就我而言,测试范围覆盖了被测代码范围。
请注意,我正在使用jacoco.exec
作为集成测试下代码的覆盖率数据。通常,这用于单元测试,但是我的模块中没有单元测试。这样,我不需要为额外的文件名配置SonarQube,但是如果您愿意,可以在此处使用另一个文件名。
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<executions>
<execution>
<id>prepare-agent-integration-cargo</id>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
<configuration>
<destFile>${project.build.directory}/jacoco.exec</destFile>
<propertyName>argLineCargo</propertyName>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<configuration>
<container>
<!-- ... -->
</container>
<configuration>
<properties>
<cargo.start.jvmargs>${argLineCargo}</cargo.start.jvmargs>
<!-- ... -->
</properties>
</configuration>
<!-- ... -->
</configuration>
<!-- ... -->
</plugin>
以及父POM中的JaCoCo配置:
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration>
<includes>
<include>my/project/package/**/*</include>
</includes>
</configuration>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>prepare-agent-integration</id>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
</execution>
<execution>
<id>reports</id>
<goals>
<goal>report</goal>
<goal>report-integration</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>@{argLine}</argLine>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<argLine>@{argLine}</argLine>
</configuration>
</plugin>
</plugins>
</build>