Jacoco統計接口覆蓋率

我們通常通過接口自動化來進行上線前驗證,保障當前迭代的改動不影響原有接口的正常運行,這就需要接口的覆蓋率較高,才能起到重要的價值。通過jacoco進行覆蓋率統計,可以清晰地統計出接口覆蓋率情況,並且能夠根據覆蓋的代碼情況進一步完善接口自動化。話不多說,接下來我們就來看下如何用jacoco進行接口覆蓋率統計。

 

1、首先需要在需要統計的服務對應的機器上安裝jacoco和ant

下載jacoco和ant壓縮包:

ant直接解壓,解壓後,會自動生成一個ant的文件夾;

jacoco需要自己先新建一個文件夾,然後把壓縮包放進去解壓。

然後將ant加入環境變量:

vim ~/.bashrc

然後執行命令:

source ~/.bashrc

即時生效。

 

然後運行ant -v

表明安裝成功。

 

2、在服務的tomcat啓動項上增加如下配置:

-javaagent:/xxxx/jacoco/lib/jacocoagent.jar=includes=com.xxx.*,output=tcpserver,port=8125,address=127.0.0.1

其中,端口可隨意指定,只要不跟其他端口衝突即可,如果是本機,ip須是127.0.0.1

然後重啓服務,會自動監聽本機的port端口

 

3、在服務器上增加build.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project name="JaCoCo" default="run" xmlns:jacoco="antlib:org.jacoco.ant">
        <!--Jacoco的安裝路徑-->
    <property name="jacocoAntPath" value="/home/用戶/xxx/tools/jacoco/lib/jacocoant.jar"/>
        <!--最終生成.exec文件的路徑,Jacoco就是根據這個文件生成最終的報告的-->
    <property name="jacocoExecPath" value="/home/用戶/xxx/codeCoverage/study/jacocoExec"/>
        <!--生成覆蓋率報告的路徑-->
    <property name="jacocoReportPath" value="/home/用戶/xxx/codeCoverage/study/report"/>
        <!--遠程tomcat服務的ip地址  xxx.xx.xxx.163(172.16.1.31)-->
    <property name="server_ip" value="127.0.0.1"/>
        <!--前面配置的遠程tomcat服務打開的端口,要跟上面配置的一樣-->
    <property name="server_port" value="8125"/>

        <!--源代碼路徑-->
    <property name="srcPath" value="/home/用戶/sourceSrc/xxx/src/main/java"/>

        <!--service.class文件路徑-->
    <property name="classesPath" value="/home/用戶/xxx/instance1/approot/testhf/BOOT-INF/classes"/>

        <!--讓ant知道去哪兒找Jacoco-->
      <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
            <classpath path="${jacocoAntPath}"/>
      </taskdef>

           <target name="run">
            <echo message="start..."/>
            <echo message="dump..."/>
                <antcall target="dump"/>
            <echo message="merge..."/>
                <antcall target="merge"/>
            <echo message="report..."/>
                <antcall target="report"/>
            <echo message="end..."/>
           </target>

      <!--dump任務:
                        根據前面配置的ip地址,和端口號,訪問目標tomcat服務,並生成.exec文件。-->
      <target name="dump">
        <jacoco:dump address="${server_ip}" reset="true" destfile="${jacocoExecPath}/study_jacoco.exec" port="${server_port}" append="false"/>
      </target>

    <target name="merge">
        <jacoco:merge destfile="${jacocoExecPath}/merged.exec">
            <fileset dir="${jacocoExecPath}" includes="*.exec"/>
        </jacoco:merge>
    </target>

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

            <structure name="JaCoCo Report">
                <group name="xxxx coverage">
                    <sourcefiles encoding="UTF-8">
                            <fileset dir="${srcPath}"/>
                    </sourcefiles>
                    <classfiles>
                          <fileset dir="${classesPath}/com/netease/edu"/>
                    </classfiles>
                </group>

            </structure>

            <html destdir="${jacocoReportPath}" encoding="utf-8"/>
           <csv destfile="${jacocoReportPath}/report.csv"/>
        <xml destfile="${jacocoReportPath}/report.xml"/>
        </jacoco:report>
      </target>
</project>

其中,上面的port必須和tomcat啓動項中的端口保持一致。

然後執行ant -f build.xml即可生成報告。

 

4、持續集成

多個服務可能在多臺服務器上,在同一個服務器上時,注意端口不要衝突,在多個服務器上,每次都去服務器上執行不方便,可在jenkins持續集成機器上編寫腳本,通過remotessh的方式進入各個機器執行腳本並拷貝報告到job機器上,展示覆蓋率結果。

此處拷貝report文件夾,需要將目標路徑文件夾的權限爲777纔行,否則會拷貝失敗~

5、覆蓋率報告如下:

進入代碼中可看到哪些語句被覆蓋了,哪些還未被覆蓋,然後作爲依據補充接口自動化用例。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章