Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为单元和集成测试生成声纳覆盖报告_Java_Sonarqube_Jacoco_Maven Surefire Plugin_Sonarqube Scan - Fatal编程技术网

Java 为单元和集成测试生成声纳覆盖报告

Java 为单元和集成测试生成声纳覆盖报告,java,sonarqube,jacoco,maven-surefire-plugin,sonarqube-scan,Java,Sonarqube,Jacoco,Maven Surefire Plugin,Sonarqube Scan,我已经看了一段时间关于stackoverflow的不同文章和答案,但我还没有找到一个有效的解决方案。我对jacoco、maven和sonar如何共同创建报告的理解肯定有问题,所以我想寻求帮助 我有一个多模块maven项目,其结构如下(稍微简化): 请允许我扩展一下。父模块只是一个pom,包含整个依赖项及其版本。此pom用作level1的每个其他模块的父级(直接在根下)。例如,模块3_1_1具有父模块3_1/pom,而父模块3_1/pom又具有父模块/pom。我还排除了一个功能模块,因为它用于向其

我已经看了一段时间关于stackoverflow的不同文章和答案,但我还没有找到一个有效的解决方案。我对jacoco、maven和sonar如何共同创建报告的理解肯定有问题,所以我想寻求帮助

我有一个多模块maven项目,其结构如下(稍微简化):

请允许我扩展一下。父模块只是一个pom,包含整个依赖项及其版本。此pom用作level1的每个其他模块的父级(直接在根下)。例如,模块3_1_1具有父模块3_1/pom,而父模块3_1/pom又具有父模块/pom。我还排除了一个功能模块,因为它用于向其他项目公开模块,这在我的案例中没有用处

大多数模块(但不是所有模块)都使用junit框架进行单元测试。集成测试在一个单独的模块中,该模块有几个辅助子模块和一个包含实际ITests类的子模块。我的itests涵盖了整个项目中的所有代码,因此它们测试来自所有其他模块的代码

我的根pom也有一些内部框架作为父框架,基本上是一个osgi容器、web服务和处理第三方依赖关系

我有sonar 5.6版,未能创建集成测试报告。我还希望它们能够合并,这样我就可以深入查看每个模块/类的测试覆盖率。我尝试了不同的选项和设置,我最近的尝试在我的根文件夹/pom.xml中有以下内容

 <!-- properties section-->
  <properties>
        <jacoco.version>0.7.2.201409121644</jacoco.version>
        <sonar.language>java</sonar.language>
        <sonar.sourceEncoding>UTF-8</sonar.sourceEncoding>
        <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
        <jacoco.outputDir>${project.build.directory}</jacoco.outputDir>
        <jacoco.out.ut.file>jacoco-ut.exec</jacoco.out.ut.file>
        <sonar.jacoco.reportPath>${jacoco.outputDir}/${jacoco.out.ut.file}</sonar.jacoco.reportPath>
        <jacoco.out.it.file>jacoco-it.exec</jacoco.out.it.file>
        <sonar.jacoco.itReportPath>${jacoco.outputDir}/${jacoco.out.it.file}</sonar.jacoco.itReportPath>
    </properties>

<!-- plugins section-->
<profiles>
        <profile>
            <id>coverage</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <argLine>${jacoco.agent.ut.arg}</argLine>
                            <!-- test failure ignore -->
                            <testFailureIgnore>true</testFailureIgnore>
                            <includes>
                                <include>**/*Test*</include>
                            </includes>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <argLine>-Xmx1024m -XX:MaxPermSize=256m ${jacoco.agent.it.arg}
                            </argLine>
                            <!-- Let's put failsafe reports with surefire to have access to tests
                                failures/success reports in sonar -->
                            <reportsDirectory>${project.build.directory}/surefire-reports
                            </reportsDirectory>
                            <includes>
                                <include>**/*IT*</include>
                            </includes>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.jacoco</groupId>
                        <artifactId>jacoco-maven-plugin</artifactId>
                        <version>${jacoco.version}</version>
                        <executions>
                            <!-- Prepares a variable, jacoco.agent.ut.arg, that contains the info
                                to be passed to the JVM hosting the code being tested. -->
                            <execution>
                                <id>prepare-ut-agent</id>
                                <phase>process-test-classes</phase>
                                <goals>
                                    <goal>prepare-agent</goal>
                                </goals>
                                <configuration>
                                    <destFile>${sonar.jacoco.reportPath}</destFile>
                                    <propertyName>jacoco.agent.ut.arg</propertyName>
                                    <append>true</append>
                                </configuration>
                            </execution>
                            <!-- Prepares a variable, jacoco.agent.it.arg, that contains the info
                                to be passed to the JVM hosting the code being tested. -->
                            <execution>
                                <id>prepare-it-agent</id>
                                <phase>pre-integration-test</phase>
                                <goals>
                                    <goal>prepare-agent</goal>
                                </goals>
                                <configuration>
                                    <destFile>${sonar.jacoco.itReportPath}</destFile>
                                    <propertyName>jacoco.agent.it.arg</propertyName>
                                    <append>true</append>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <!-- Integraton tests -->
        <profile>
            <id>run-its</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>integration-test</id>
                                <phase>integration-test</phase>
                                <goals>
                                    <goal>integration-test</goal>
                                </goals>
                            </execution>
                            <execution>
                                <id>verify</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>verify</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

此外,由于我的插件配置位于根pom中,它尝试分析我所有模块(包括没有单元测试的模块)的报告,并在sonar运行日志中抛出错误,但我认为这不是问题。非常感谢您的帮助,如果您需要,请询问更多详细信息。谢谢。

使用以下配置文件作为起点并运行mvn sonar:sonar,其中-Dsonar.jacoco.itReportPath和-Dsonar.jacoco.reportPath指向报告路径

     <profile>
        <id>coverage</id>
        <properties>
            <jacoco.includes>com.trmsys.*</jacoco.includes>
            <jacoco.agent.jar>${project.build.directory}/org.jacoco.agent-${jacoco-maven-plugin.version}-runtime.jar
            </jacoco.agent.jar>
            <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
            <sonar.jacoco.reportPath>${session.executionRootDirectory}/target/jacoco.exec</sonar.jacoco.reportPath>
            <sonar.jacoco.itReportPath>${session.executionRootDirectory}/target/jacoco-it.exec</sonar.jacoco.itReportPath>
        </properties>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>prepare-agent</id>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                            <configuration>
                                <destFile>${sonar.jacoco.reportPath}</destFile>
                                <propertyName>jacoco.agent.arg</propertyName>
                                <includes>
                                    <include>${jacoco.includes}</include>
                                </includes>
                                <append>true</append>
                            </configuration>
                        </execution>
                        <execution>
                            <id>prepare-agent-integration</id>
                            <goals>
                                <goal>prepare-agent-integration</goal>
                            </goals>
                            <phase>initialize</phase>
                            <configuration>
                                <destFile>${sonar.jacoco.itReportPath}</destFile>
                                <propertyName>jacoco.agent.it.arg</propertyName>
                                <includes>
                                    <include>${jacoco.includes}</include>
                                </includes>
                                <append>true</append>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
            <pluginManagement>
                <plugins>
                    <!-- links jacoco agent to surefire for unit tests -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <argLine>${jacoco.agent.arg}</argLine>
                        </configuration>
                    </plugin>
                    <!-- links jacoco agent to failsafe for integration tests -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <argLine>${jacoco.agent.it.arg}</argLine>
                        </configuration>
                    </plugin>
                </plugins>
            </pluginManagement>
        </build>
    </profile>

新闻报道
com.trmsys*
${project.build.directory}/org.jacoco.agent-${jacocomaven plugin.version}-runtime.jar
杰科科
${session.executionRootDirectory}/target/jacoco.exec
${session.executionRootDirectory}/target/jacoco-it.exec
org.jacoco
jacocomaven插件
配制剂
配制剂
${sonar.jacoco.reportPath}
jacoco.agent.arg
${jacoco.includes}
真的
准备代理集成
准备代理集成
初始化
${sonar.jacoco.itReportPath}
jacoco.agent.it.arg
${jacoco.includes}
真的
org.apache.maven.plugins
maven surefire插件
${jacoco.agent.arg}
org.apache.maven.plugins
maven故障保护插件
${jacoco.agent.it.arg}

使用以下配置文件作为起点并运行mvn sonar:sonar,其中-Dsonar.jacoco.itReportPath和-Dsonar.jacoco.reportPath指向报告路径

     <profile>
        <id>coverage</id>
        <properties>
            <jacoco.includes>com.trmsys.*</jacoco.includes>
            <jacoco.agent.jar>${project.build.directory}/org.jacoco.agent-${jacoco-maven-plugin.version}-runtime.jar
            </jacoco.agent.jar>
            <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
            <sonar.jacoco.reportPath>${session.executionRootDirectory}/target/jacoco.exec</sonar.jacoco.reportPath>
            <sonar.jacoco.itReportPath>${session.executionRootDirectory}/target/jacoco-it.exec</sonar.jacoco.itReportPath>
        </properties>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>prepare-agent</id>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                            <configuration>
                                <destFile>${sonar.jacoco.reportPath}</destFile>
                                <propertyName>jacoco.agent.arg</propertyName>
                                <includes>
                                    <include>${jacoco.includes}</include>
                                </includes>
                                <append>true</append>
                            </configuration>
                        </execution>
                        <execution>
                            <id>prepare-agent-integration</id>
                            <goals>
                                <goal>prepare-agent-integration</goal>
                            </goals>
                            <phase>initialize</phase>
                            <configuration>
                                <destFile>${sonar.jacoco.itReportPath}</destFile>
                                <propertyName>jacoco.agent.it.arg</propertyName>
                                <includes>
                                    <include>${jacoco.includes}</include>
                                </includes>
                                <append>true</append>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
            <pluginManagement>
                <plugins>
                    <!-- links jacoco agent to surefire for unit tests -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <argLine>${jacoco.agent.arg}</argLine>
                        </configuration>
                    </plugin>
                    <!-- links jacoco agent to failsafe for integration tests -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <argLine>${jacoco.agent.it.arg}</argLine>
                        </configuration>
                    </plugin>
                </plugins>
            </pluginManagement>
        </build>
    </profile>

新闻报道
com.trmsys*
${project.build.directory}/org.jacoco.agent-${jacocomaven plugin.version}-runtime.jar
杰科科
${session.executionRootDirectory}/target/jacoco.exec
${session.executionRootDirectory}/target/jacoco-it.exec
org.jacoco
jacocomaven插件
配制剂
配制剂
${sonar.jacoco.reportPath}
jacoco.agent.arg
${jacoco.includes}
真的
准备代理集成
准备代理集成
初始化
${sonar.jacoco.itReportPath}
jacoco.agent.it.arg
${jacoco.includes}
真的
     <profile>
        <id>coverage</id>
        <properties>
            <jacoco.includes>com.trmsys.*</jacoco.includes>
            <jacoco.agent.jar>${project.build.directory}/org.jacoco.agent-${jacoco-maven-plugin.version}-runtime.jar
            </jacoco.agent.jar>
            <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
            <sonar.jacoco.reportPath>${session.executionRootDirectory}/target/jacoco.exec</sonar.jacoco.reportPath>
            <sonar.jacoco.itReportPath>${session.executionRootDirectory}/target/jacoco-it.exec</sonar.jacoco.itReportPath>
        </properties>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>prepare-agent</id>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                            <configuration>
                                <destFile>${sonar.jacoco.reportPath}</destFile>
                                <propertyName>jacoco.agent.arg</propertyName>
                                <includes>
                                    <include>${jacoco.includes}</include>
                                </includes>
                                <append>true</append>
                            </configuration>
                        </execution>
                        <execution>
                            <id>prepare-agent-integration</id>
                            <goals>
                                <goal>prepare-agent-integration</goal>
                            </goals>
                            <phase>initialize</phase>
                            <configuration>
                                <destFile>${sonar.jacoco.itReportPath}</destFile>
                                <propertyName>jacoco.agent.it.arg</propertyName>
                                <includes>
                                    <include>${jacoco.includes}</include>
                                </includes>
                                <append>true</append>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
            <pluginManagement>
                <plugins>
                    <!-- links jacoco agent to surefire for unit tests -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <argLine>${jacoco.agent.arg}</argLine>
                        </configuration>
                    </plugin>
                    <!-- links jacoco agent to failsafe for integration tests -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <argLine>${jacoco.agent.it.arg}</argLine>
                        </configuration>
                    </plugin>
                </plugins>
            </pluginManagement>
        </build>
    </profile>