jacoco測試覆蓋率過濾非業務類


之前在做接口測試代碼覆蓋率(jacoco)方案的時候,漏了一些東西,這篇文章補一下。做使用jacoco做接口代碼覆蓋率測試的過程中,遇到一個問題:測試報告里面信息太多,很雜亂沒有針對性,很多都是configbean以及適配器的類,絕大部分沒有業務代碼,統計出來的覆蓋率受影響比較大,不夠准確。

這里就引入了如何過濾jacoco代碼覆蓋率測試報告的問題,經過查閱資料,大概的方案分兩種:一是在jacoco配置中過濾,二是在class文件夾中刪除掉無用的class文件。

經過一些考量,決定采用第一種方案,原因如下:

  1. 第二種方案不可逆,如果在統計完某一個moudel的覆蓋率,之后在統計其他moudel的時候就無法直接實現;
  2. 第二種處理起來比較麻煩,規則需要腳本實現。
  3. 與現有框架不好結合,沒辦法在報告的框架中方便快捷實現這個功能。

第一種方案主要修改build文件的配置:


<?xml version="1.0" ?>
<project name="studentpad-middle-toc" basedir="/home/jmsmanager/report/studentpad-middle-toc"
    xmlns:jacoco="antlib:org.jacoco.ant"
    xmlns:sonar="antlib:org.sonar.ant" default="all">
    <!--項目名-->
    <property name="projectName" value="studentpad-middle-toc"/>
    <!--Jacoco的安裝路徑-->
    <property name="jacocoantPath" value="/home/jmsmanager/jacoco/lib/jacocoant.jar"/>
    <!--生成覆蓋率報告的路徑-->
    <property name="reportfolderPath" value="${basedir}/report/"/>
    <!--遠程服務的ip地址,如有多個,可設置多個,name需修改-->
    <property name="server_ip" value="127.0.0.1"/>

    <!--待測程序.class文件路徑-->
    <property name="waterommpClasspath" value="/xdfapp/${projectName}/webapps/ROOT/WEB-INF/classes/com/noriental/moudle"/>

    <!--待測程序源碼文件路徑-->
    <property name="mcmSrcpath" value="${basedir}/source/${projectName}/workspace/src/main/java"/>
    <!--Jacoco所在目錄-->
    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
        <classpath path="${jacocoantPath}" />
    </taskdef>

    <!--merge task,當有多個待測程序時,生成報告前需將所有.exec文件merge成一個-->
    <target name="merge" depends="dump">
        <jacoco:merge destfile="jacoco.exec">
            <fileset dir="${basedir}" includes="*.exec"/>
        </jacoco:merge>
    </target>
<!--dump任務:
           根據前面配置的ip地址,和端口號,訪問目標服務,並生成.exec文件。-->

    <target name="dump">
        <!-- reset="true"是指在dump完成之后,重置jvm中的覆蓋率數據為空。append="true"是指dump出來的exec文件為增量方式 -->
        <jacoco:dump address="${server_ip}" reset="true" destfile="${basedir}/jacoco.exec" port="12345" append="false"/>
    </target>


    <!--report任務:
               根據前面配置的源代碼路徑和.class文件路徑,
      根據dump后,生成的.exec文件,生成最終的html覆蓋率報告。-->
    <target name="report">
        <delete dir="${reportfolderPath}" />
        <mkdir dir="${reportfolderPath}" />

        <jacoco:report>
            <executiondata>
                <file file="${basedir}/jacoco.exec" />

            </executiondata>

            <structure name="JaCoCo Report">

                <group name="學生中間層代碼覆蓋率">
                    <classfiles>
                        <fileset dir="${waterommpClasspath}">
				<exclude name="**/vo/*.class"/>
                        </fileset>
                    </classfiles>

                    <sourcefiles encoding="UTF-8">
                    	<fileset dir="${mcmSrcpath}">
                  	</fileset>
                  </sourcefiles>
                </group>
            </structure>

            <html destdir="${reportfolderPath}" encoding="utf-8" />
            <csv destfile="${reportfolderPath}/report.csv" />
            <xml destfile="${reportfolderPath}/report.xml" />

        </jacoco:report>
    </target>
    <target name="all" />

</project>

主要在exclude這個標簽里面過濾,如果大塊排除,也可以在指定classfilepath的時候過濾。


  • 鄭重聲明:“FunTester”首發,歡迎關注交流,禁止第三方轉載。更多原創文章:FunTester十八張原創專輯,合作請聯系Fhaohaizi@163.com

熱文精選


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM