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

JaCoCo离线仪器和集成测试覆盖率报告

湛联
2023-03-14

我一直在尝试在JBoss服务器中实现JaCoCo离线代码覆盖,使用仪表化的EAR进行部署和jacococagent.jar,以便跟踪针对所述JBoss运行的外部集成测试的代码覆盖。

我一直在关注这样的指南:

http://www.eclemma.org/jacoco/trunk/doc/offline.html

http://automationrhapsody.com/code-coverage-with-jacoco-offline-instrumentation-with-maven/

我觉得我很接近,因为一切似乎都在工作,但是,当我在eclipse的EclEmma插件中加载覆盖率报告时,它报告为0覆盖率(我知道这是错误的)。

这是我的设置:

这是maven插件配置:

                <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>${jacoco.version}</version>
                <configuration>
                    <!-- <destFile>${sonar.jacoco.reportPath}</destFile> -->
                    <append>true</append>

                    <excludes>
                        <exclude>**/dao/**/*Dao*</exclude>
                        <exclude>**/dao/**/*DAO*</exclude>
                        <exclude>**/dao/**/*Vo*</exclude>
                        <exclude>**/dao/**/*VO*</exclude>
                        <exclude>**/ui/**/*</exclude>
                        <exclude>**/*Vo.*</exclude>
                        <exclude>**/*VO.*</exclude>
                        <exclude>**/test/**/*</exclude>
                        <exclude>**/tester/**/*</exclude>
                    </excludes>

                </configuration>
                <executions>
                    <execution>
                        <id>pre-unit-test</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                        <configuration>
                            <destFile>${sonar.jacoco.reportPath}</destFile>
                        </configuration>
                    </execution>
                    <execution>
                        <id>unit-test-report</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                        <configuration>
                            <dataFile>${sonar.jacoco.reportPath}</dataFile>
                        </configuration>
                    </execution>
                    <execution>
                        <id>jacoco-instrument</id>
                        <phase>test</phase>
                        <goals>
                            <goal>instrument</goal>
                        </goals>
                        <configuration>
                            <skip>${jacoco.skip.instrument}</skip>
                            <!-- <skip>false</skip> -->
                        </configuration>
                    </execution>
                </executions>
            </plugin>

这是我的jacoco-agent.properties文件:

destfile=/stage/live_integration_jacoco.exec
output=file
dumponexit=true
append=true

我将 JaCoCo 代理 JAR 捆绑在 EAR 中,作为这些依赖项(第二个就是我们的存储库中标记的 jacoagent.jar):

        <dependency>
            <groupId>org.jacoco</groupId>
            <artifactId>org.jacoco.agent</artifactId>
            <version>${jacoco.version}</version>
        </dependency>

        <dependency>
            <groupId>org.jacoco.build</groupId>
            <artifactId>org.jacoco.jacocoagent</artifactId>
            <version>${jacoco.version}</version>
        </dependency>

这是我的过程:

我在项目上运行这个:mvn净安装-U-Djacoco.skip.instrument=false

这就产生了我的人工耳。我已经验证了其中的类确实被JaCoCo反编译了一些。

我采用了已检测代码的EAR,即jacococagent。其中包括jar和jacoco探员。还包括popreties文件,并将其部署到JBoss。JBoss启动得很好(在我开始直接绑定jacoagent.jar之前,它曾获得ClassNotFound异常)。

此时创建的“/stage/live_integration_jacoco.exec”文件的大小为“0”。

我在服务器上运行了一些测试,甚至一些手动测试,然后停止应用程序。

“/stage/live _ integration _ jaco co . exec”文件现在有数据了(据我观察,目前有30-60kb的数据)。

我将那个exec文件导入eclipse,它没有任何错误地加载并显示项目中的类,但是它报告所有内容的覆盖率为0。

好吧,我不确定在这一点上还可以尝试什么。

有人对如何在我的情况下正确生成覆盖率报告有什么想法吗?

谢谢!

共有1个答案

周龙光
2023-03-14

我怀疑部署在服务器上的类是用Oracle Java编译器编译的,而Eclipse中的类是使用Eclipse Java编译器编译,因此JaCoCo无法将它们关联起来,因为它们不同。要确认这一点,您可以尝试使用您尝试导入的exec文件生成报告,但在Eclipse之外使用Ant或Maven。并确保在原始(未插入指令的)类上执行报告生成,否则它们也将不匹配。

 类似资料:
  • 我在测试android以创建覆盖率测试报告时遇到问题。我使用./gradlew createDebugCoverageReport命令创建覆盖率报告。已创建报告,但所有测试的结果均为%0。第一个设备已植根,但第二个设备未植根。我们使用这两个设备测试勺子,并查看勺子输出。所以这两个设备一起使用。问题:当我们使用第一个设备(根设备)运行此命令时,将按预期创建所有覆盖率测试结果,但当我们同时使用两个设备

  • 问题内容: 从不同的代码库执行业务测试时,我必须获得应用程序的代码覆盖率。 我使用:Maven作为我的构建Jbehave作为我的测试框架。测试是用Java编写的。 我的应用程序是部署在tomcat上的一组war文件。 应用程序代码库与测试代码库是分开的。 为了获得覆盖范围,我遵循以下步骤。 1使用maven编译测试代码。 2将应用程序类从其构建位置($ {app.code.dir} / targe

  • SonarQube不再显示我用jacoco分析的项目的测试覆盖率。似乎SonarQube有了更新(我发现新规则的日期是5月19日)。我还假设,从那时起,不再评估使用jacoco maven插件收集的测试覆盖率。我见过类似问题的老问题,但那是4年前的事了:JaCoCo SonarQube不兼容版本1007 我将POM更新到最新的插件版本0.8.4,但无济于事。有什么想法吗?我需要在哪里更改一些东西,

  • 使用jacoco代理并获取测试覆盖率报告有大量答案。大多数答案都是一半,我有点困惑。 以下是我想做的:1。我的Java应用程序正在某个远程服务器上运行。说IP-192.168.17.7 我使用以下命令运行测试:mvn-Denv=stage-Dmaven。测验失败ignore=true-DsuiteFile=src/test/java/Smoke。xml测试 现在我如何通过使用Jacoco代理获得J

  • 我正在使用arquillian和tomee远程插件进行集成测试。它工作得很好。但我的代码覆盖率不起作用。我使用Jacoco插件来覆盖代码。在我的Java类Java中遇到异常。朗,乐器。IllegalClassFormatException:检测com/demo/EmpService时出错 如何使用Jacoco在远程容器中进行代码覆盖? 注意:我已经在集成阶段将javaagent(argLine)传

  • v2.0 Codecov报表 , 从2017-12-29后开始统计 测试覆盖率为 : , 可以从 https://codecov.io/gh/apache/dubbo 页面得到覆盖率报表 v1.0 基于 2.0.12 版本,统计于 2012-02-03