【问题标题】:Sonar Integration Tests Coverage not show + Selenium + Jboss +Jacoco声纳集成测试覆盖率不显示 + Selenium + Jboss +Jacoco
【发布时间】:2014-04-09 10:10:19
【问题描述】:

我使用 Sonar 4.1.1、Jboss 6.x、Jacoco 0.6.4,用 Ant 执行任务我不允许使用 Maven。在一个 Eclipse 工作区中,我有两个项目,一个是 web 应用程序,另一个是 selenium 测试。

我能够获得单元测试的单元测试和代码覆盖率。但声纳无法读取Jacoco 创建的集成测试文件。我认为我创建jacoco-it.exec 文件的方式可能有问题,因此声纳无法读取它。因为声纳确实读取了我的jacoco-ut.exec 文件。我可以同时拥有reportPathitReportPath 来毫无问题地读取我的jacoco-ut.exec 文件。还认为我的构建文件中可能有问题。我做了很多研究并尝试了许多不同的方法来创建jacoco-it.exec 文件、不同的 Jacoco 设置,并遵循了来自 sonar、jacoco 和其他博客的不同示例,但仍然无法正常工作。我一定是错过了什么帮助!谢谢!!

我有这样的 Jboss 的 VM 参数

-javaagent:/path to jar/jacocoagent.jar=destfile=/path for create/jacoco-it.exec

当我运行 selenium 时,上面的代码创建了一个包含一些数据的文件,大小约为 1.3MB

这是与此问题相关的构建部分

    <property name="sonar.sourceEncoding" value="UTF-8" />
    <property name="sonar.java.coveragePlugin" value="jacoco" />
    <property name="sonar.core.codeCoveragePlugin" value="jacoco" />
    <property name="sonar.dynamicAnalysis" value="reuseReports" />

    <property name="sonar.jacoco.reportsPath" value="${reports.dir}/junit" />
    <property name="sonar.jacoco.itReportPath" value="${reports.dir}/jacoco-it.exec" />
    <property name="sonar.jacoco.reportPath" value="${reports.dir}/jacoco-ut.exec" />

<target name="unitTest" depends="compile">
        <taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
            <classpath>
                <path refid="classpath"/>
            </classpath>
        </taskdef>
        <!-- Import the JaCoCo Ant Task -->
        <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
            <classpath refid="classpath"/>
        </taskdef>
        <!-- Run your unit tests, adding the JaCoCo agent -->
        <jacoco:coverage destfile="reports/jacoco-ut.exec" xmlns:jacoco="antlib:org.jacoco.ant">
            <junit printsummary="yes" haltonfailure="yes" forkmode="once" fork="true" dir="${basedir}" failureProperty="test.failed">
                <classpath location="${classes.dir}" />
                <classpath refid="classpath"/>
                <formatter type="plain" />
                <formatter type="xml" />
                <batchtest fork="true" todir="${reports.junit.xml.dir}">
                    <fileset dir="src">
                        <include name="**/*TestAdd.java" />
                    </fileset>
                </batchtest>
            </junit>
        </jacoco:coverage>
    </target>

<target name="coverageTest" depends="compile">
        <taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
            <classpath>
                <path refid="classpath"/>
            </classpath>
        </taskdef>
        <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
            <classpath refid="classpath"/>
        </taskdef>
        <!--Run your unit tests, adding the JaCoCo agent-->
        <jacoco:coverage xmlns:jacoco="antlib:org.jacoco.ant" dumponexit="true"                                                               >
            <junit printsummary="yes" haltonfailure="yes" forkmode="once" fork="true"  dir="${basedir}" failureProperty="test.failed">
                <classpath location="${classes.dir}"/>
                <classpath refid="classpath"/>
                <formatter type="plain" />
                <formatter type="xml" />
                <formatter type="plain" usefile="false"/>
                <batchtest todir="${reports.junit.xml.dir}">
                    <fileset dir="../HelloAppTest/src">
                        <include name="**/answerTest.java"/>
                    </fileset>
                </batchtest>
            </junit>
        </jacoco:coverage>
    </target>

【问题讨论】:

    标签: selenium ant jboss6.x sonarqube jacoco


    【解决方案1】:

    原因可能是您没有将 Jacocoagent.jar 文件附加到“TARGET”(例如:JBoss / Tomcat)JVM 的作用域并停止它以便它可以刷新最终代码覆盖数据到 jacoco it exec 文件。

    一旦你这样做了(而不是使用 Maven/ANT 的 JVM 范围),运行你的非单元 (IT) 测试,然后 STOP 目标 JVM。

    目标 JVM 停止后,您将获得最终的 jacoco .exec 文件,用于 IT 测试。将该文件用于 sonar.jacoco.itReportPath 变量,它会起作用。

    例如:我将这个变量传递给 Tomcat 的 startup.sh 脚本,并在启动 Tomcat(目标 JVM)时,在 Tomcat 的实际启动命令中使用这个变量。

    PROJ_EXTRA_JVM_OPTS=-javaagent:tomcat/jacocoagent.jar=destfile=build/jacoco/IT/jacocoIT.exec,append=false
    

    【讨论】:

      猜你喜欢
      • 2013-10-14
      • 2016-11-10
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 2013-11-21
      • 2016-01-16
      • 1970-01-01
      • 2016-11-18
      相关资源
      最近更新 更多