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

时间:2016-11-08 21:10:20

标签: java maven jboss integration-testing jacoco

我一直试图在JBoss服务器中使用检测的EAR进行部署和jacococagent.jar实现JaCoCo离线代码覆盖,以跟踪针对所述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 Agent JAR绑定在EAR中作为这些依赖项(第二个就是jacocoagent.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 clean install -U -Djacoco.skip.instrument=false

这会生成我的仪器化EAR工件。我已经证实,JaCoCo通过反编译其中的一些来确保那里的课程。

我把那个包含了代码的EAR,包含在其中的jacococagent.jar和包含在内的jacoco-agent.popreties文件中,并将其部署到JBoss。 JBoss开始很好(它在我开始直接捆绑jacocoagent.jar之前用来获取ClassNotFound异常)。

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

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

“/stage/live_integration_jacoco.exec”文件现在有数据(我的观察到目前为止已有30-60kb的数据)。

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

好吧,我不确定此时还有什么可以尝试。

有没有人对如何在我的情况下正确生成覆盖率报告有一些想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

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