当前位置: 首页 > 知识库问答 >
问题:

声纳:当集成测试在不同项目中时测量代码覆盖率

祁增
2023-03-14
-project1          <-- parent pom with two children.
|--module1         <-- web services
\--module1-itest   <-- integration tests written with TestNG
    null

我知道这远不是理想的情况...它更像是一个中间步骤,而我们试图改进一个几乎没有测试的遗留项目...

我的问题是:在Sonar的Module1仪表板中执行集成测试,最好的方法是什么?

最初,我倾向于将module1-itest中的代码移到module1,并使用Failsafe插件和与Jacoco的集成来运行它们。这样,Module1将混合使用JUnit单元测试和TestNG集成测试,每组测试分别由Surefire和Failsafe运行,在预集成阶段启动Jetty服务器。

    null

共有1个答案

卫嘉谊
2023-03-14

我们是这样解决的:

摘要:

  • 服务和服务-ITEST项目是两个独立的模块。
  • 服务具有由声纳报告覆盖范围的单元测试。
  • service-itests使用Cargo加载服务WAR并运行集成测试。在此执行中收集的代码覆盖率报告在一个级别之上。通过这种方式,跨模块收集和合并了ITests的覆盖范围,并在父项目pom级别报告。我们也喜欢这种方法,因为它允许我们拥有不同的ITests项目(例如,一个项目装载应用程序的货物,另一个项目使用JBehave),并且它们可以独立发展。
    <modules>
            <module>service</module>
            <module></module>
            <module>service-itest</module>
        </modules>
    <!-- Sonar -->
            <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
            <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
            <!-- The destination file for the code coverage report has to be set to 
                the same value in the parent pom and in each module pom. Then JaCoCo will 
                add up information in the same report, so that, it will give the cross-module 
                code coverage. -->
            <sonar.jacoco.itReportPath>${project.basedir}/../target/jacoco-itests.exec</sonar.jacoco.itReportPath>
...
<build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>0.6.3.201306030806</version>
                </plugin>
            </plugins>
        </pluginManagement>
...
<plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <configuration>
                    <includes>
                        <include>our.project.packages.*</include>
                    </includes>
                </configuration>
                <executions>
                    <execution>
                        <id>pre-test</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>post-test</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
<plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <configuration>
                    <!-- The destination file for the code coverage report has to be set 
                        to the same value in the parent pom and in each module pom. Then JaCoCo will 
                        add up information in the same report, so that, it will give the cross-module 
                        code coverage. -->
                    <destFile>${project.basedir}/../target/jacoco-itests.exec</destFile>
                    <includes>
                        <include>our.packages.*</include>
                    </includes>
                </configuration>
                <executions>
                    <execution>
                        <id>post-test</id>
                        <configuration>
                            <skip>true</skip>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <version>1.2.2</version>
                <configuration>
                    <skip>${cargo.skip}</skip>
                    <container>
                        <containerId>jetty7x</containerId>
                        <artifactInstaller>
                            <groupId>org.eclipse.jetty</groupId>
                            <artifactId>jetty-distribution</artifactId>
                            <version>7.6.12.v20130726</version>
                            <type>zip</type>
                        </artifactInstaller>
                    </container>
                    <configuration>
                        <type>standalone</type>
                        <properties>
                            <cargo.servlet.port>${jetty.port}</cargo.servlet.port>
                            <cargo.jvmargs>${argLine}</cargo.jvmargs>
                        </properties>
                        <deployables>
                            <deployable>
                                <artifactId>pam_filetask_manager_service</artifactId>
                                <groupId>${project.groupId}</groupId>
                                <type>war</type>
                                <pingURL>http://server:22000/ping</pingURL>
                                <properties>
                                </properties>
                            </deployable>
                        </deployables>
                    </configuration>
                </configuration>
                <executions>
                    <execution>
                        <id>start-server</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>install</goal>
                            <goal>start</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>stop-server</id>
                        <phase>post-integration-test</phase>
                        <goals>
                            <goal>stop</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
 类似资料:
  • 有人知道是否有可能(以及如何)在Postman集成测试执行中生成代码覆盖率吗? 我们有基于Postman的集成测试,并通过Windows shell命令在Jenkins上执行。令人沮丧的是,我们不知道如何生成代码覆盖报告并将其发布到SonarQube中。 提前万分感谢!

  • 我必须在我的android测试中设置代码覆盖报告,然后在声纳中发布它们。我读到没有工具和插件可以做到这一点。我正在使用gradle脚本,我尝试Jacoco插件,cobertura,但没有结果。有什么办法解决吗?此外,我试图做像这里Gradle Jacoco代码覆盖-然后发布/显示在詹金斯

  • 我已经看了一段时间关于stackoverflow的不同文章和答案,但我还没有找到适合我的情况的有效解决方案。我对jacoco、maven和sonar如何一起创建报告的理解肯定有问题,所以我要寻求帮助。 我有一个多模块maven项目,其结构如下(稍微简化了一下): 请允许我扩展一下。父模块只是一个带有整个依赖项及其版本的pom。这个pom被用作level1的每一个其他模块的父模块(直接位于根下面)。

  • 声纳没有接收IntelliJidea/Jacoco覆盖报告生成的代码覆盖报告。 这是我试图让声纳接收jacoco报告的一个样本 JacocoSensor:找不到JaCoCo报告:/export/.../buildagent2/work/.../.teamcity/coverage_jacoco/JaCoCo.exec 声纳: 此组件没有覆盖范围详细信息。

  • 我已经成功地用Karma和Webpack为我的沙盒项目设置了测试。代码覆盖率指标由伊斯坦布尔仪器加载器收集。让我困扰的是,我只得到测试中导入的模块的报告覆盖率,所以报告的100%覆盖率实际上是一个肮脏的谎言。 寻找解决方案,我在伊斯坦布尔Instrumenter Loader的自述文件中找到了一段话: 要为所有组件创建代码覆盖率报告(即使是那些尚未进行测试的组件),您必须需要所有1)源代码和2)测

  • 我正在使用: 声纳v.3.2(有jacoco) Maven 3.0.4 跟随”http://johndobie.blogspot.in/2012/05/easy-unit-and-integration-code-coverage.html#comment-表格“以获得单元的单独代码覆盖率 日志显示如下: POM文件: