Jacoco實(shí)戰(zhàn)

背景

Jacoco是主流的統(tǒng)計(jì)覆蓋率的工具。下面以java語言為例,展示從0開始,獲取代碼覆蓋率的過程。

展示平臺

Jenkins
其他:雖然jacoco本身也支持生成xml或者h(yuǎn)tml等多種形式的覆蓋率報告,但是都沒有jenkins用起來簡單順手,用戶界面友好

操作步驟

術(shù)語定義

  • 服務(wù)器:被測服務(wù)所在機(jī)器
  • 客戶端:跑完測試用例后,用來獲取覆蓋率的工具機(jī)器。一般就是jenkins的slave機(jī)器。如果slave機(jī)器無法直接連接到服務(wù)器,該怎么辦呢?后面有詳細(xì)介紹

安裝jacoco,啟動服務(wù)端

下載地址:https://www.jacoco.org/jacoco/index.html

按照對應(yīng)系統(tǒng)下載到壓縮包后,解壓后,放到服務(wù)器所在一個路徑例如/work/admin/test-qa-lib,在JVM啟動參數(shù)中增加如下,其中6300表示服務(wù)器上要開的監(jiān)聽端口,用于后續(xù)jacoco客戶端發(fā)出請求,請求服務(wù)中累積的覆蓋率數(shù)據(jù)。

-javaagent:/work/admin/test-qa-lib/jacoco/lib/jacocoagent.jar=includes=,output=tcpserver,address=,port=6300,append=false

例如一個完整的服務(wù)啟動腳本類似:

JACOCO_ARGS="-javaagent:/work/admin/test-qa-lib/jacoco/lib/jacocoagent.jar=includes=*,output=tcpserver,address=*,port=6300,append=false"
JAVA_OPTS="$JAVA_OPTS $JACOCO_ARGS"
nohup java $JAVA_OPTS -server -jar XX你的服務(wù)jar包XX.jar &

客戶端上安裝也要安裝jacoco

記錄下安裝地址,暫時不用

客戶端上安裝ant,用來組織對jacoco的客戶端調(diào)用

下載地址 https://ant.apache.org/bindownload.cgi
wget https://mirror.bit.edu.cn/apache//ant/binaries/apache-ant-1.9.14-bin.zip

unzip apache-ant-1.9.14-bin.zip
mv apache-ant-1.9.14 ant
ln -s /home/admin/ant/ant/bin/ant /home/admin/bin/

在客戶端機(jī)器上準(zhǔn)備好build.xml,其中的絕對路徑是客戶端機(jī)器上jacoco的所在路徑

<?xml version="1.0" encoding="UTF-8"?>
<project name="coverage_service" xmlns:jacoco="antlib:org.jacoco.ant">
    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
        <classpath path="絕對路徑/jacoco-0.8.6/lib/jacocoant.jar"/>
    </taskdef>
    <target name="run">
        <antcall target="dump"/>
        <antcall target="merge"/>
    </target>
    <target name="dump">
        <jacoco:dump address="服務(wù)所在機(jī)器的IP" reset="true" port="6300" destfile="./jacoco_0.exec" append="false"/>
    </target>
    <target name="merge">
        <jacoco:merge destfile="./merged.exec">
            <fileset dir="./" includes="*.exec"/>
        </jacoco:merge>
    </target>
</project>

配置jenkins

在jenkins的執(zhí)行腳本中填入

ant dump #dump數(shù)據(jù)后,達(dá)到清空歷史數(shù)據(jù)的目的。當(dāng)被測環(huán)境和其他人共用時,為了避免其他人的行為產(chǎn)生更多覆蓋數(shù)據(jù),必須加上清空的操作
mvn test
ant run

當(dāng)客戶端無法訪問到服務(wù)器時(可選,如果你的jenkins機(jī)器,能夠直接連接上服務(wù)所在機(jī)器的6300端口,可以跳過這一節(jié))

一般,所謂的客戶端就是jenkins機(jī)器。如果兩者不通時,還想用jenkins的代碼覆蓋率自動展示頁面的功能,可以采取如下方法
實(shí)質(zhì)執(zhí)行的時候,由于網(wǎng)絡(luò)不通,采取自動執(zhí)行用例,手動拷貝覆蓋率exec文件,自動展示的方式

  • step1
    Jenkins自動執(zhí)行用例 mvn test
  • step2
    手動拷貝覆蓋率文件。將build.xml和手動腳本放在和服務(wù)所在的統(tǒng)一臺機(jī)器上(解決網(wǎng)絡(luò)問題),腳本的操作過程是執(zhí)行ant dump/ant merge/將目標(biāo)的class打包出來,最終生成我們所需的2個文件即merged.exec和estate-class.zip
  • step3 在jenkins上的腳本配置框里填入
    cp /home/admin/merged.exec ./
    cp /home/admin/service-class.zip ./
    unzip -o service-class.zip -d classes
  • step4 將第二步step2里的merge.exec和estate-class.zip拷貝到j(luò)enkins的slave機(jī)器上,再啟動jenkins的任務(wù)即可。最后的效果,就是在jenkins上能夠基于jacoco插件看到覆蓋率的統(tǒng)計(jì)結(jié)果

測試報告分析

一般都會使用行覆蓋率來衡量測試用例的覆蓋程度。M代表Miss,是指沒有覆蓋到的部分, C代表Catch,代表已經(jīng)覆蓋的部分

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容