声纳IT覆盖率报告

时间:2014-07-09 17:06:27

标签: maven sonarqube

我有一个项目,我需要在Sonar中报告集成测试(IT)的覆盖范围。我可以使用jacoco maven插件生成覆盖率报告,因此我知道jacoco代理已正确设置,但Sonar无法找到源文件以生成其报告。

项目结构是

  
      
  • 生成   
        
    • 模块1
    •   
    • 单词数
    •   
    • IT模块
    •   
  •   

IT模块没有源它只测试Module1和Module2中的类。我试图使用sonar.sources配置源路径但是声纳仍然无法找到源 - 来自日志

[18:01:37.610] Class not found in SquidIndex: com/module1/Class1

我怀疑拥有一个空的集成测试模块有点不寻常(更多的是系统测试而不是IT),是否可以配置声纳来报告IT覆盖范围?

1 个答案:

答案 0 :(得分:1)

我有一个单独的模块,只包含测试类来测试其他模块的集成。那没关系。

分析覆盖范围时,声纳会根据sonar.jacoco.itReportPath属性中指定的coverage文件检查每个模块的代码。默认值为target/jacoco-it.exec。因此,在分析Module1时,会检查Module1/target/jacoco-it.exec中的覆盖率信息。但是,当IT模块中捕获覆盖数据时,您必须将声纳指向构建和测试IT模块时生成的文件。

因此,我为我的项目所做的是使用单个覆盖数据进行每个模块的单元测试覆盖,并使用中央文件来获取IT覆盖数据。

<plugin>
  <groupId>org.jacoco</groupId>
  <artifactId>jacoco-maven-plugin</artifactId>
  <version>0.7.4.201502262128</version>
  <executions>
    <execution>
      <id>prepare-agent</id>
      <goals>
        <goal>prepare-agent</goal>
      </goals>
      <configuration>
        <destFile>target/jacoco.exec</destFile>
        <append>true</append>
        <propertyName>surefireArgLine</propertyName>
      </configuration>
    </execution>
    <execution>
      <id>prepare-it-agent</id>
      <phase>pre-integration-test</phase>
      <goals>
        <goal>prepare-agent</goal>
      </goals>
      <configuration>
        <destFile>${session.executionRootDirectory}/target/jacoco-it.exec</destFile>
        <append>true</append>
        <propertyName>failsafeArgLine</propertyName>
      </configuration>
    </execution>
  </executions>
 </plugin>

${session.executionRootDirectory}属性是执行的根,就像根模块一样。如果您的多模块具有多个嵌套级别,这也适用。

现在,您需要指出声纳在分析IT覆盖范围时使用该文件。所以你必须将sonar.jacoco.itReportPath设置为该文件。不幸的是,这不适用于session.executionRootDirectory属性,您必须手动设置文件的绝对路径。我不建议在pom.xml中指定绝对路径,因为此路径特定于您的构建环境。因此,要么在Sonar中设置路径,要么在构建环境中设置System属性。我直接在声纳项目设置(Java&gt; Jacoco)中设置它,例如/opt/buildroot/myProject/target/jacoco-it.exec。 现在,声纳将检查该文件以进行每个模块的IT覆盖分析。