声纳积分测试覆盖范围未显示+ Selenium + Jboss + Jacoco

时间:2014-03-06 16:23:41

标签: selenium ant jboss6.x sonarqube jacoco

我使用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设置,并遵循声纳,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>

1 个答案:

答案 0 :(得分:1)

原因是,您可能没有将Jacocoagent.jar文件附加到&#34; TARGET &#34; (例如:JBoss / Tomcat)JVM的范围并将其停止,以便它可以将最终的代码覆盖率数据刷新到jacoco it exec文件。

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

在目标JVM停止后,您将获得为IT测试生成的最终jacoco .exec文件。将该文件用于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