我有一个项目,我已经使用jacoco插件为junit测试用例和集成测试生成了jacoco.exec报告文件。
这是我用于声纳的maven属性:
<sonar.jacoco.itReportPath>${project.basedir}/target/it/jacoco.exec</sonar.jacoco.itReportPath>
<sonar.jacoco.reportPath>${project.basedir}/target/junit/jacoco.exec</sonar.jacoco.reportPath>
<!-- Tells Sonar to run the unit tests -->
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<!-- Tells Sonar to use JaCoCo as the code coverage tool -->
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.language>java</sonar.language>
我创建了声纳的配置文件,如下所示:
<profile>
<id>sonar-run</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.jdbc.url>
jdbc:mysql://localhost:3306/sonar
</sonar.jdbc.url>
<sonar.jdbc.username>sonar</sonar.jdbc.username>
<sonar.jdbc.password>123qwe</sonar.jdbc.password>
<sonar.host.url>
http://localhost:9000/
</sonar.host.url>
</properties>
</profile>
我面临的问题是,我能够在声纳中看到单元测试代码覆盖率,但我无法看到集成测试代码覆盖率。
我以多种方式运行maven命令:
mvn verify -P sonar-run sonar:sonar
mvn verify -P sonar-run sonar:sonar -Dtests=false
mvn clean install -P sonar-run sonar:sonar
但是我仍然无法在声纳中看到集成测试代码的覆盖范围,我是否错过了一些步骤?
我使用声纳4.0,java-7。
注意:对于我们来说jacoco.exec文件已经在其他一些运行中生成了,我只想在可能的情况下将它们播种到声纳,这样我们将获得一些性能提升。
答案 0 :(得分:0)
我们还在我们的pom中定义了两个独立的变量,包含我们希望为正常测试和集成测试生成的jacoco.exec
的路径:
<sonar.jacoco.reportPath>${project.basedir}/../../target/jacoco.exec</sonar.jacoco.reportPath>
<sonar.jacoco.itReportPath>${project.basedir}/../../target/jacoco-it.exec</sonar.jacoco.itReportPath>
我们有2个单独的个人资料(分别挂钩prepare-agent
和prepare-agent-integration
):
<profile>
<id>jacoco-ut</id>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<executions>
<execution>
<id>agent-for-ut</id>
<configuration>
<destFile>${sonar.jacoco.reportPath}</destFile>
<append>true</append>
</configuration>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!-- Code coverage with Jacoco on integration-tests -->
<profile>
<id>jacoco-it</id>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<executions>
<execution>
<id>agent-for-it</id>
<configuration>
<destFile>${sonar.jacoco.itReportPath}</destFile>
<append>true</append>
</configuration>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
这就是我们如何运行单元测试和集成测试,最后将结果发送到声纳:
mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install -Dmaven.test.failure.ignore=true -Pdefault,jacoco-ut
mvn org.jacoco:jacoco-maven-plugin:prepare-agent-integration install -Pintegration-tests,jacoco-it -Dmaven.test.failure.ignore=true
mvn sonar:sonar -Pdefault -Dsonar.host.url=http://XX -Dsonar.dynamicAnalysis=reuseReports -Dmaven.test.skip=true -Dmaven.test.failure.ignore=true -DsonarPassword=XX -DsonarJdbcPassword=XX -Psonar
因此,我们使用prepare-agent install
个人资料呼叫jacoco-ut
,使用prepare-agent-integration install
个人资料呼叫jacoco-it
。