接口測試代碼覆蓋率(jacoco)方案分享

在作接口測試過程當中,爲了達到量化接口測試用例效果的目的,引入了代碼覆蓋率做爲重要指標,在查閱相關文檔和資料經過實踐以後,大概獲得了一個方案。如圖:
html

備註:該方案略微複雜了一些,緣由在於服務JVM所在的服務器和Jenkins構建服務器與測試腳本所在服務器分別在三臺服務器上。java

Jenkins機器:服務對應的Jenkins機器web

測試項目Jenkins:服務對應的測試項目Jenkins機器編程

第一次畫流程圖,有點亂,這裏在介紹一下思路,經過服務所在的Tomcat容器的啓動腳本(JAVA_OPTS參數)引入jacoco配置,而後啓動服務,經過ant配置build.xml讀取exec的信息編譯並生成報告(html格式)。最後使用web服務來查看相關報告。服務器

最終頁面展現狀況以下:app

jacoco配置
 框架

jacoco配置
jacoco配置須要在jar項目啓動參數裏面添加以下信息:jvm

 -javaagent:/home/jmsmanager/jacoco/lib/jacocoagent.jar=includes=com.noriental.*,output=tcpserver,address=127.0.0.1,port=12345tcp

javaagent配置:jacocoagent.jar所在目錄性能

includes配置:所包含的包路徑

output配置:輸出類型,默認tcpserver

address配置:服務ip,本機IP選12.7.0.0.1

port配置:端口,任選

ant配置build.xml文件

<?xml version="1.0" ?>

<project name="user-center" basedir="/home/jmsmanager/report/user-center"
    xmlns:jacoco="antlib:org.jacoco.ant"
    xmlns:sonar="antlib:org.sonar.ant" default="all">
    <!--項目名-->
    <property name="projectName" value="user-center"/>
    <!--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="/home/jmsmanager/report/${projectName}/source/BOOT-INF/classes/com/noriental/center/moudle/"/>

    <!--待測程序源碼文件路徑-->
    <property name="mcmSrcpath" value="${basedir}/source/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="false" destfile="${basedir}/jacoco.exec" port="12347" append="true"/>
    </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="**/request/*.class"/>
                                <exclude name="**/response/*.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>
</project>
 

由於報告在服務所運行的機器上,並且設計的機器比較多,因此把測試報告集中放在某一臺機器上統一提供查看。

一塊兒來~FunTester

往期文章精選

  1. java一行代碼打印心形
  2. Linux性能監控軟件netdata中文漢化版
  3. 接口測試代碼覆蓋率(jacoco)方案分享
  4. 性能測試框架
  5. 如何在Linux命令行界面愉快進行性能測試
  6. 圖解HTTP腦圖
  7. 寫給全部人的編程思惟
  8. 測試之JVM命令腦圖

公衆號地圖

相關文章
相關標籤/搜索