Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 合并多个生成时错误的代码覆盖率_Java_Jenkins_Ant_Sonarqube_Jacoco - Fatal编程技术网

Java 合并多个生成时错误的代码覆盖率

Java 合并多个生成时错误的代码覆盖率,java,jenkins,ant,sonarqube,jacoco,Java,Jenkins,Ant,Sonarqube,Jacoco,在我们的项目中,JaCoCo使用Jenkins或SonarQube进行错误的覆盖率计算时遇到了问题 <property name="demo" location="."/> <property name="exec_name" value="build1.exec"/> <import file= "${demo}/buildscripts/common/product_common_ant.xml"

在我们的项目中,JaCoCo使用Jenkins或SonarQube进行错误的覆盖率计算时遇到了问题

<property name="demo"           location="."/>
<property name="exec_name"      value="build1.exec"/>
<import file=                   "${demo}/buildscripts/common/product_common_ant.xml"/>

<property name="coverage_data"  location="\\server\jenkins\jobs\Test-Coverage\coverage_data\JobName"/>

<target name="testrun" depends="compile" description="Execute tests with coverage">
    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="UnitTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/unitTests.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file="${test-output}/testng-results.xml" tofile = "${test-output}/unit-test-results.xml"/>
    <fail if="testng.failure"/>

    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="IntegrationTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/integTests_Build.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/integ-test-results.xml"/>
    <fail if="testng.failure"/>

    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="BUildGUITests1" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/funcTests_build_part01.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/gui-test-results.xml"/>
    <fail if="testng.failure"/>
</target>

<target name="mergeTestResults" depends="testrun, copyCoverageResults">
    <copy file="${buildscripts}/empty-test-results.xml" tofile="${test-output}/testng-merge.xml"/>
    <for param="xmlFile">
        <path>
            <fileset dir="${test-output}" >
                <include name="unit-test-results.xml" />
                <include name="integ-test-results.xml" />
                <include name="gui-test-results.xml" />
            </fileset>
        </path>
        <sequential>
            <copy   file="${test-output}/testng-merge.xml"  toFile="${test-output}/start-merge.xml"/>
            <xslt style="${buildscripts}/merge-test-results.xsl"
                        destdir="${test-output}"
                        in="${test-output}/start-merge.xml"
                        out="${test-output}/testng-merge.xml">
                <param name="with" expression="@{xmlFile}" />
            </xslt>
            <delete file="${test-output}/start-merge.xml" />
        </sequential>
    </for>
</target>
这是Jenkins构建的常见构建脚本示例:

<property name="demo"           location="."/>
<property name="exec_name"      value="build1.exec"/>
<import file=                   "${demo}/buildscripts/common/product_common_ant.xml"/>

<property name="coverage_data"  location="\\server\jenkins\jobs\Test-Coverage\coverage_data\JobName"/>

<target name="testrun" depends="compile" description="Execute tests with coverage">
    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="UnitTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/unitTests.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file="${test-output}/testng-results.xml" tofile = "${test-output}/unit-test-results.xml"/>
    <fail if="testng.failure"/>

    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="IntegrationTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/integTests_Build.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/integ-test-results.xml"/>
    <fail if="testng.failure"/>

    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="BUildGUITests1" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/funcTests_build_part01.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/gui-test-results.xml"/>
    <fail if="testng.failure"/>
</target>

<target name="mergeTestResults" depends="testrun, copyCoverageResults">
    <copy file="${buildscripts}/empty-test-results.xml" tofile="${test-output}/testng-merge.xml"/>
    <for param="xmlFile">
        <path>
            <fileset dir="${test-output}" >
                <include name="unit-test-results.xml" />
                <include name="integ-test-results.xml" />
                <include name="gui-test-results.xml" />
            </fileset>
        </path>
        <sequential>
            <copy   file="${test-output}/testng-merge.xml"  toFile="${test-output}/start-merge.xml"/>
            <xslt style="${buildscripts}/merge-test-results.xsl"
                        destdir="${test-output}"
                        in="${test-output}/start-merge.xml"
                        out="${test-output}/testng-merge.xml">
                <param name="with" expression="@{xmlFile}" />
            </xslt>
            <delete file="${test-output}/start-merge.xml" />
        </sequential>
    </for>
</target>
覆盖率构建包含以下脚本

<property name="demo"           location="."/>
<property name="exec_name"      value="build1.exec"/>
<import file=                   "${demo}/buildscripts/common/product_common_ant.xml"/>

<property name="coverage_data"  location="\\server\jenkins\jobs\Test-Coverage\coverage_data\JobName"/>

<target name="testrun" depends="compile" description="Execute tests with coverage">
    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="UnitTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/unitTests.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file="${test-output}/testng-results.xml" tofile = "${test-output}/unit-test-results.xml"/>
    <fail if="testng.failure"/>

    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="IntegrationTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/integTests_Build.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/integ-test-results.xml"/>
    <fail if="testng.failure"/>

    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="BUildGUITests1" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/funcTests_build_part01.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/gui-test-results.xml"/>
    <fail if="testng.failure"/>
</target>

<target name="mergeTestResults" depends="testrun, copyCoverageResults">
    <copy file="${buildscripts}/empty-test-results.xml" tofile="${test-output}/testng-merge.xml"/>
    <for param="xmlFile">
        <path>
            <fileset dir="${test-output}" >
                <include name="unit-test-results.xml" />
                <include name="integ-test-results.xml" />
                <include name="gui-test-results.xml" />
            </fileset>
        </path>
        <sequential>
            <copy   file="${test-output}/testng-merge.xml"  toFile="${test-output}/start-merge.xml"/>
            <xslt style="${buildscripts}/merge-test-results.xsl"
                        destdir="${test-output}"
                        in="${test-output}/start-merge.xml"
                        out="${test-output}/testng-merge.xml">
                <param name="with" expression="@{xmlFile}" />
            </xslt>
            <delete file="${test-output}/start-merge.xml" />
        </sequential>
    </for>
</target>
<project name="Product Test Coverage Build" default="report" basedir="..\.." xmlns:jacoco="antlib:org.jacoco.ant">
<echo>Current username: ${user.name}</echo>

<defaultexcludes echo="true"/>

<property name="demo"           location="."/>
<property name="src"            location="${demo}/src"/>
<property name="bin"            location="${demo}/bin"/>
<property name="lib1"           location="${demo}/lib"/>
<property name="lib2"           location="${demo}/lib64"/>
<property name="coverage"       location="${demo}/coverage"/>

<property name="pr11_coverage"  location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part1-64\"/>
<property name="pr12_coverage"  location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part2-64\"/>
<property name="pr13_coverage"  location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part3-64\"/>
<property name="pr14_coverage"  location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part4-64\"/>
<property name="pr15_coverage"  location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part5-64\"/>
<property name="pr16_coverage"  location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part6-64\"/>
<property name="pr17_coverage"  location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part7-64\"/>
<property name="pr18_coverage"  location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part8-64\"/>
<property name="pr19_coverage"  location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product-Part9-64\"/>

<property name="pr21_coverage"  location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part1-64\"/>
<property name="pr22_coverage"  location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part2-64\"/>
<property name="pr23_coverage"  location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part3-32\"/>
<property name="pr24_coverage"  location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part4-64\"/>
<property name="pr25_coverage"  location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part5-64\"/>
<property name="pr26_coverage"  location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part6-64\"/>
<property name="pr27_coverage"  location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part7-32\"/>
<property name="pr28_coverage"  location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part8-64\"/>
<property name="pr210_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product2-Part10-64\"/>

<property name="pr31_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product3-Unit-Integ-Tests\"/>
<property name="pr32_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product3-32\"/>
<property name="pr33_coverage" location="\\server\jenkins\jobs\Product-Test-Coverage\coverage_data\Product3-Integration-1\"/>

<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml" classpathref="testrun_classpath"/>

<target name="merge" depends ="compile">
    <jacoco:merge destfile="${coverage}/merged.exec">
        <fileset dir="${pr11_coverage}" includes="*.exec"/>
        <fileset dir="${pr12_coverage}" includes="*.exec"/>
        <fileset dir="${pr13_coverage}" includes="*.exec"/>
        <fileset dir="${pr14_coverage}" includes="*.exec"/>
        <fileset dir="${pr15_coverage}" includes="*.exec"/>
        <fileset dir="${pr16_coverage}" includes="*.exec"/>
        <fileset dir="${pr17_coverage}" includes="*.exec"/>
        <fileset dir="${pr18_coverage}" includes="*.exec"/>
        <fileset dir="${pr19_coverage}" includes="*.exec"/>

        <fileset dir="${pr21_coverage}" includes="*.exec"/>
        <fileset dir="${pr22_coverage}" includes="*.exec"/>
        <fileset dir="${pr23_coverage}" includes="*.exec"/>
        <fileset dir="${pr24_coverage}" includes="*.exec"/>
        <fileset dir="${pr25_coverage}" includes="*.exec"/>
        <fileset dir="${pr26_coverage}" includes="*.exec"/>
        <fileset dir="${pr27_coverage}" includes="*.exec"/>
        <fileset dir="${pr28_coverage}" includes="*.exec"/>
        <fileset dir="${pr210_coverage}" includes="*.exec"/>

        <fileset dir="${pr31_coverage}" includes="*.exec"/>
        <fileset dir="${pr32_coverage}" includes="*.exec"/>
        <fileset dir="${pr33_coverage}" includes="*.exec"/>
    </jacoco:merge>
</target>

<property environment="env"/>
<property name="coverage_rep"   location="\\server\jenkins\jobs\Product-Test-Coverage\builds\${env.BUILD_NUMBER}\"/>

<target name="report" depends="merge">
    <jacoco:report>
        <executiondata>
            <file file="${coverage}/merged.exec"/>
        </executiondata>
        <structure name="Product Overall Code Coverage">
            <sourcefiles encoding="UTF-8">
                <fileset dir="${src}"/>
            </sourcefiles>
        </structure>
        <html destdir="${coverage}"/>
        <csv destfile="${coverage}/report.csv"/>
        <xml destfile="${coverage}/report.xml"/>
    </jacoco:report>
    <copy   file="${coverage}/index.html"   tofile="${coverage_rep}/index.html"/>
</target>

当前用户名:${user.name}

<property name="demo"           location="."/>
<property name="exec_name"      value="build1.exec"/>
<import file=                   "${demo}/buildscripts/common/product_common_ant.xml"/>

<property name="coverage_data"  location="\\server\jenkins\jobs\Test-Coverage\coverage_data\JobName"/>

<target name="testrun" depends="compile" description="Execute tests with coverage">
    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="UnitTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/unitTests.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file="${test-output}/testng-results.xml" tofile = "${test-output}/unit-test-results.xml"/>
    <fail if="testng.failure"/>

    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="IntegrationTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/integTests_Build.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/integ-test-results.xml"/>
    <fail if="testng.failure"/>

    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="BUildGUITests1" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/funcTests_build_part01.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/gui-test-results.xml"/>
    <fail if="testng.failure"/>
</target>

<target name="mergeTestResults" depends="testrun, copyCoverageResults">
    <copy file="${buildscripts}/empty-test-results.xml" tofile="${test-output}/testng-merge.xml"/>
    <for param="xmlFile">
        <path>
            <fileset dir="${test-output}" >
                <include name="unit-test-results.xml" />
                <include name="integ-test-results.xml" />
                <include name="gui-test-results.xml" />
            </fileset>
        </path>
        <sequential>
            <copy   file="${test-output}/testng-merge.xml"  toFile="${test-output}/start-merge.xml"/>
            <xslt style="${buildscripts}/merge-test-results.xsl"
                        destdir="${test-output}"
                        in="${test-output}/start-merge.xml"
                        out="${test-output}/testng-merge.xml">
                <param name="with" expression="@{xmlFile}" />
            </xslt>
            <delete file="${test-output}/start-merge.xml" />
        </sequential>
    </for>
</target>
我已经拿出编译和构建部分

<property name="demo"           location="."/>
<property name="exec_name"      value="build1.exec"/>
<import file=                   "${demo}/buildscripts/common/product_common_ant.xml"/>

<property name="coverage_data"  location="\\server\jenkins\jobs\Test-Coverage\coverage_data\JobName"/>

<target name="testrun" depends="compile" description="Execute tests with coverage">
    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="UnitTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/unitTests.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file="${test-output}/testng-results.xml" tofile = "${test-output}/unit-test-results.xml"/>
    <fail if="testng.failure"/>

    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="IntegrationTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/integTests_Build.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/integ-test-results.xml"/>
    <fail if="testng.failure"/>

    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="BUildGUITests1" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/funcTests_build_part01.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/gui-test-results.xml"/>
    <fail if="testng.failure"/>
</target>

<target name="mergeTestResults" depends="testrun, copyCoverageResults">
    <copy file="${buildscripts}/empty-test-results.xml" tofile="${test-output}/testng-merge.xml"/>
    <for param="xmlFile">
        <path>
            <fileset dir="${test-output}" >
                <include name="unit-test-results.xml" />
                <include name="integ-test-results.xml" />
                <include name="gui-test-results.xml" />
            </fileset>
        </path>
        <sequential>
            <copy   file="${test-output}/testng-merge.xml"  toFile="${test-output}/start-merge.xml"/>
            <xslt style="${buildscripts}/merge-test-results.xsl"
                        destdir="${test-output}"
                        in="${test-output}/start-merge.xml"
                        out="${test-output}/testng-merge.xml">
                <param name="with" expression="@{xmlFile}" />
            </xslt>
            <delete file="${test-output}/start-merge.xml" />
        </sequential>
    </for>
</target>
当Jenkins或SonarQube运行这个脚本时,我们的代码覆盖率约为19%,而在Eclipse中本地运行所有测试,并使用Eclemma(与Jacoco)进行合并,我们的代码覆盖率约为65%(这是更可靠的结果)

<property name="demo"           location="."/>
<property name="exec_name"      value="build1.exec"/>
<import file=                   "${demo}/buildscripts/common/product_common_ant.xml"/>

<property name="coverage_data"  location="\\server\jenkins\jobs\Test-Coverage\coverage_data\JobName"/>

<target name="testrun" depends="compile" description="Execute tests with coverage">
    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="UnitTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/unitTests.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file="${test-output}/testng-results.xml" tofile = "${test-output}/unit-test-results.xml"/>
    <fail if="testng.failure"/>

    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="IntegrationTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/integTests_Build.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/integ-test-results.xml"/>
    <fail if="testng.failure"/>

    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="BUildGUITests1" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/funcTests_build_part01.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/gui-test-results.xml"/>
    <fail if="testng.failure"/>
</target>

<target name="mergeTestResults" depends="testrun, copyCoverageResults">
    <copy file="${buildscripts}/empty-test-results.xml" tofile="${test-output}/testng-merge.xml"/>
    <for param="xmlFile">
        <path>
            <fileset dir="${test-output}" >
                <include name="unit-test-results.xml" />
                <include name="integ-test-results.xml" />
                <include name="gui-test-results.xml" />
            </fileset>
        </path>
        <sequential>
            <copy   file="${test-output}/testng-merge.xml"  toFile="${test-output}/start-merge.xml"/>
            <xslt style="${buildscripts}/merge-test-results.xsl"
                        destdir="${test-output}"
                        in="${test-output}/start-merge.xml"
                        out="${test-output}/testng-merge.xml">
                <param name="with" expression="@{xmlFile}" />
            </xslt>
            <delete file="${test-output}/start-merge.xml" />
        </sequential>
    </for>
</target>
我们的构建在每次SVN提交时运行,并在每次运行之前编译。所有测试服务器都使用相同的Java版本,尽管使用的是32位和64位体系结构

<property name="demo"           location="."/>
<property name="exec_name"      value="build1.exec"/>
<import file=                   "${demo}/buildscripts/common/product_common_ant.xml"/>

<property name="coverage_data"  location="\\server\jenkins\jobs\Test-Coverage\coverage_data\JobName"/>

<target name="testrun" depends="compile" description="Execute tests with coverage">
    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="UnitTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/unitTests.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file="${test-output}/testng-results.xml" tofile = "${test-output}/unit-test-results.xml"/>
    <fail if="testng.failure"/>

    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="IntegrationTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/integTests_Build.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/integ-test-results.xml"/>
    <fail if="testng.failure"/>

    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="BUildGUITests1" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/funcTests_build_part01.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/gui-test-results.xml"/>
    <fail if="testng.failure"/>
</target>

<target name="mergeTestResults" depends="testrun, copyCoverageResults">
    <copy file="${buildscripts}/empty-test-results.xml" tofile="${test-output}/testng-merge.xml"/>
    <for param="xmlFile">
        <path>
            <fileset dir="${test-output}" >
                <include name="unit-test-results.xml" />
                <include name="integ-test-results.xml" />
                <include name="gui-test-results.xml" />
            </fileset>
        </path>
        <sequential>
            <copy   file="${test-output}/testng-merge.xml"  toFile="${test-output}/start-merge.xml"/>
            <xslt style="${buildscripts}/merge-test-results.xsl"
                        destdir="${test-output}"
                        in="${test-output}/start-merge.xml"
                        out="${test-output}/testng-merge.xml">
                <param name="with" expression="@{xmlFile}" />
            </xslt>
            <delete file="${test-output}/start-merge.xml" />
        </sequential>
    </for>
</target>

我们在这里做错了什么?

在一年多之后,代码覆盖率突然又变得正确了。奇怪的是,不幸的是,以前没有办法找出错误所在。

一年多之后,代码覆盖率突然又恢复了。奇怪的是,不幸的是,没有办法找出以前的错误

<property name="demo"           location="."/>
<property name="exec_name"      value="build1.exec"/>
<import file=                   "${demo}/buildscripts/common/product_common_ant.xml"/>

<property name="coverage_data"  location="\\server\jenkins\jobs\Test-Coverage\coverage_data\JobName"/>

<target name="testrun" depends="compile" description="Execute tests with coverage">
    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="UnitTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/unitTests.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file="${test-output}/testng-results.xml" tofile = "${test-output}/unit-test-results.xml"/>
    <fail if="testng.failure"/>

    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="IntegrationTests" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/integTests_Build.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/integ-test-results.xml"/>
    <fail if="testng.failure"/>

    <jacoco:coverage destfile="${cov_res_file}" append="true">
        <testng classpathref="testrun_classpath" suitename="BUildGUITests1" failureProperty="testng.failure" verbose="2" outputdir="${test-output}" workingDir="${demo}">
            <xmlfileset dir="${test}" includes="builds/funcTests_build_part01.xml"/>
        </testng>
    </jacoco:coverage>
    <copy file = "${test-output}/testng-results.xml" tofile = "${test-output}/gui-test-results.xml"/>
    <fail if="testng.failure"/>
</target>

<target name="mergeTestResults" depends="testrun, copyCoverageResults">
    <copy file="${buildscripts}/empty-test-results.xml" tofile="${test-output}/testng-merge.xml"/>
    <for param="xmlFile">
        <path>
            <fileset dir="${test-output}" >
                <include name="unit-test-results.xml" />
                <include name="integ-test-results.xml" />
                <include name="gui-test-results.xml" />
            </fileset>
        </path>
        <sequential>
            <copy   file="${test-output}/testng-merge.xml"  toFile="${test-output}/start-merge.xml"/>
            <xslt style="${buildscripts}/merge-test-results.xsl"
                        destdir="${test-output}"
                        in="${test-output}/start-merge.xml"
                        out="${test-output}/testng-merge.xml">
                <param name="with" expression="@{xmlFile}" />
            </xslt>
            <delete file="${test-output}/start-merge.xml" />
        </sequential>
    </for>
</target>