2017-02-10 86 views
2

我有一个项目,为此我已经使用jacoco插件为junit测试用例和集成测试生成了jacoco.exec报告文件。种子声纳与junit和集成测试报告(jacoco.exec)从maven

这是我用声纳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 

但还是我不能看到声纳集成测试代码覆盖率,我错过了一些步骤?

我用sonar 4.0,java-7。

注:对我们来说,jacoco.exec文件在一些其他的运行已经产生,我只是想给他们种子声纳如果可能的话,这样,我们会获得一些性能改进。

+0

好的,谢谢澄清和编辑相应的问题。你在使用多模块项目吗? –

+0

是的,这是多模块maven项目...但这不是我关心的... –

回答

0

我们还定义2个独立的变量在我们的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> 

这就是我们同时运行单元测试和集成,测试和f inally将结果发送到声纳:

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 

所以我们使用jacoco-ut轮廓和prepare-agent-integration install使用jacoco-it轮廓调用prepare-agent install

+0

我认为,你运行集成测试/ junit测试,对我来说,这些已经在其他工作的其他地方(平行),我不想在这里运行它们,我只想获取jacoco.exec文件,然后将它们播种到声纳。只是一些性能提高,我不想再次运行它们,你认为这可以实现吗? –

+0

所以只需更新: - 所以这里是我如何解决这个问题。我们正在运行的声纳服务器版本更新到5.5(在该版本需要Java-8之后),我能够播种2个jacoco文件,一个用于junit,一个用于集成测试。它会在先前的sonarquebe中生成相同的代码覆盖率。 –