来自maven的种子声纳与junit和集成测试报告(jacoco.exec)

时间:2017-02-10 05:42:14

标签: java maven sonarqube jacoco jacoco-maven-plugin

我有一个项目,我已经使用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文件已经在其他一些运行中生成了,我只想在可能的情况下将它们播种到声纳,这样我们将获得一些性能提升。

1 个答案:

答案 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-agentprepare-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