代码之家  ›  专栏  ›  技术社区  ›  Gnana

arquillian tome远程jacoco代码覆盖范围

  •  1
  • Gnana  · 技术社区  · 7 年前

    我正在用做集成测试 多美阿奎利安7.0.4远程 尝试使用 Jacoco 0.8 .我的代码覆盖率没有覆盖,因为我正在使用arquillian-tome-remote。由于代码没有覆盖,无法进行构建。我需要一个示例代码,带有hastomeplusarquillianremote和使用jacoco的代码覆盖率。如果我得到任何示例工作代码或示例项目,我将不胜感激。

    我使用了准备代理目标,它将生成SurefireArgline(JavaAgent),并在Surefire插件中传递相同的目标。这里的问题是,我正在使用远程ToMe,不知道如何生成正确的Java代理SuffFielgLaySt到 javaagent:/home/user/.m2/repository/org/jacoco/org.jacoco.agent/0.8.2/org.jacoco.agent-0.8.2-runtime.jar=destfile=/home/user/project/target/coverage reports/jacoco-ut.exec,append=true,不包括= /配置/*.class: /util/*常量.class

    对于我的配置,正确的javaagent选项是什么,它将连接到arquillian远程机器?

    Jacoco插件

        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>${plugin.maven.jacoco.version}</version>
            <configuration>
                <propertyName>coverageAgent</propertyName>
                <append>true</append>
                <excludes>
                    <exclude>**/config/*.class</exclude>
                    <exclude>**/util/*Constants.class</exclude>
                </excludes>
            </configuration>
            <executions>
                <execution>
                    <id>pre-unit-test</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                    <configuration>
                        <destFile>${sonar.jacoco.reportPath}</destFile>
                        <propertyName>surefireArgLine</propertyName>
                        <append>true</append>
                    </configuration>
                </execution>
                <execution>
                    <id>post-unit-test</id>
                    <phase>test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                    <configuration>
                        <dataFile>${sonar.jacoco.reportPath}</dataFile>
                        <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
                        <append>true</append>
                    </configuration>
                </execution>
                <execution>
                    <id>check</id>
                    <goals>
                        <goal>check</goal>
                    </goals>
                    <configuration>
                        <dataFile>${sonar.jacoco.reportPath}</dataFile>
                        <haltOnFailure>true</haltOnFailure>
                        <rules>
                            <rule>
                                <element>BUNDLE</element>
                                <limits>
                                    <limit>
                                        <counter>LINE</counter>
                                        <value>COVEREDRATIO</value>
                                        <minimum>0.99</minimum>
                                    </limit>
                                    <limit>
                                        <counter>BRANCH</counter>
                                        <value>COVEREDRATIO</value>
                                        <minimum>0.99</minimum>
                                    </limit>
                                    <limit>
                                        <counter>CLASS</counter>
                                        <value>MISSEDCOUNT</value>
                                        <maximum>0</maximum>
                                    </limit>
                                </limits>
                            </rule>
                        </rules>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    

    附属国

    <dependency>
        <groupId>org.jboss.arquillian.testng</groupId>
        <artifactId>arquillian-testng-container</artifactId>
        <scope>test</scope>
    </dependency>
    
    <dependency>
        <groupId>org.jboss.arquillian.config</groupId>
        <artifactId>arquillian-config-api</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.jboss.arquillian.extension</groupId>
        <artifactId>arquillian-jacoco</artifactId>
        <version>1.0.0.Alpha10</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.jacoco</groupId>
        <artifactId>org.jacoco.agent</artifactId>
        <classifier>runtime</classifier>
        <scope>test</scope>
        <version>${plugin.maven.jacoco.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.jacoco/org.jacoco.core -->
    <dependency>
        <groupId>org.jacoco</groupId>
        <artifactId>org.jacoco.core</artifactId>
        <version>${plugin.maven.jacoco.version}</version>
        <scope>test</scope>
    </dependency>
    
    <dependency>
        <groupId>org.apache.tomee</groupId>
        <artifactId>arquillian-tomee-remote</artifactId>
        <version>${tomee.version}</version>
        <scope>test</scope>
    </dependency>
    

    ARQILIAN.XML

    <extension qualifier="jacoco">
        <property name="includes">com.demo.*</property>
    </extension>
    
    3 回复  |  直到 7 年前
        1
  •  1
  •   Romain Manni-Bucau    7 年前

    您可以在arquillian.xml中为tome容器设置catalina选项。用maven过滤它来传递jacoco javaagent,您就完成了:)。

        2
  •  1
  •   Gnana    7 年前

    我已经加入了适当的Java代理(SuffiFielGrand),通过Calalina Opts在远程服务器上插入远程服务器。它起作用了。

    Surefireargline-将由运行时的Surefire准备代理填充。

    <tomee.catalina_opts> ${surefireArgLine}</tomee.catalina_opts>
    
        3
  •  -1
  •   Godin    7 年前

    免责声明:我既不是阿奎利安的专家,也不是我的专家,所以你可以根据自己的目的调整答案。

    总之,简而言之,Jacoco Instruments字节码是为了提供覆盖率报告。

    因为当使用arquillian时,实际的测试执行发生在一个tomejvm中,而不是实际运行测试套件的jvm中(可能是一个CI服务器,也可能只是一个运行测试的构建脚本),所以在这个测试机上配置jacoco不会有太大的作用,您必须配置服务器本身。

    雅各科有 -javaagent 选项,这个Java代理将“拦截”服务器对类的加载并对它们进行检测。

    现在,当Jacoco工作时,它产生了 jacoco.exec 实际包含一个覆盖率报告的文件,可以稍后以各种方式显示(显示覆盖率的Jenkins插件、声纳集成等)。 这是迄今为止最常用的选择,所以如果你采用这种方法,考虑到仪器确实可以工作,在测试完成后,你必须在测试机上找到服务器,并将其下载到构建机,并与CI/Sonar集成。

    但是,还有其他解决方案:

    JaCoCo Documentation 说明运行Java Java代理的三种模式:

    • 文件系统:在JVM终止时,执行数据被写入本地文件。
    • TCP套接字服务器:外部工具可以连接到JVM并通过套接字连接检索执行数据。可选的执行数据重置和执行数据转储在VM出口是可能的。
    • TCP套接字客户端:在启动时,jacoco代理连接到给定的TCP端点。执行数据根据请求写入套接字连接。可选的执行数据重置和执行数据转储在VM出口是可能的。

    从技术上讲,您只需为JavaAgent提供不同的参数,这样它就可以在其中一种模式下运行Jacoco。

    无论如何,我们已经讨论了第一个选项,但是如果需要的话,您也可以使用TCP配置。当然,在这里您必须处理安全问题(如允许公开/访问端口等)。

    如果使用TCP模式,则 Maven Plugin 这可以派上用场。我没有自己用过它,只是在谷歌上搜索了一下,所以我不能评论它是否好,它在Github上只有2颗星,所以它可能还没有准备好生产,但也许你可以从它的源代码中得到一些想法。

    推荐文章