jacoco與jenkins集成實(shí)現(xiàn)代碼測(cè)試覆蓋率

? ? jenkins作為當(dāng)下比較主流的開(kāi)源集成工具,受到很多公司的肯定與熱捧,其強(qiáng)大的功能,和圍繞其開(kāi)發(fā)的組建,為軟件集成事業(yè)提供了強(qiáng)大的平臺(tái)性技術(shù)支撐。

? ? 那么今天暫不介紹Jenkins的具體功能,今天先來(lái)介紹一個(gè)可以與Jenkins集成的統(tǒng)計(jì)代碼測(cè)試覆蓋率的插件性工具----jacoco。

Jacoco是一個(gè)開(kāi)源的覆蓋率工具。可以嵌入到Ant 、Maven中,并且提供了EclEmma Eclipse插件,亦可以使用JavaAgent監(jiān)控Java程序。很多第三方的工具提供了對(duì)Jacoco的集成,如sonar、Jenkins等。

今天主要介紹下,jacoco遠(yuǎn)程獲取java應(yīng)用的測(cè)試覆蓋率的配置方法。以及如何與Jenkins集成。以tomcat容器為例,先說(shuō)下大概原理,應(yīng)用程序部署在10.x.x.1 的tomcat_test上,在這個(gè)容器上啟用一個(gè)java代理監(jiān)聽(tīng)端口6304,遠(yuǎn)程執(zhí)行ant命令,去10.x.x.1的6304把覆蓋率數(shù)據(jù)dump到本地的exec文件中,在通過(guò)Jenkins的jacoco分析插件,來(lái)分析生成的exec文件,與配置中指定的源文件作為基礎(chǔ)進(jìn)行一個(gè)代碼覆蓋率的計(jì)算。

以下是進(jìn)行的一次jacoco與Jenkins集成的實(shí)驗(yàn)部署:

jacoco 插件對(duì)jenkins 版本呦要求,Jenkins最好使用2.60以上版本,我使用的是2.60.3版本。

首先安裝Jenkins ,具體不講,網(wǎng)上資料多的很,Jenkins安裝好,配置好待用。

1、安裝ant ,跟jenkins服務(wù)裝在一臺(tái)機(jī)器上吧,這樣方便操作

2、jenkins服務(wù)器上安裝jacoco服務(wù)端,下載路徑:http://www.eclemma.org/jacoco/ ?下載jacoco壓縮包。復(fù)制jacoco的jar包到Jenkins服務(wù)器ant的lib目錄下。這里還有個(gè)jacocoagent.jar的jar包,這個(gè)jar是客戶端jar包,下面會(huì)告訴你這個(gè)jar包怎么處理。

3、假設(shè)待測(cè)程序部署在10.x.x.1 的 tomcat_test 下。修改tomcat里的catalina.sh文件,在JAVA_OPTS里加上? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -javaagent:/opt/test/libs/jacocoagent.jar=includes=*,destfile=/jacoco.exec,output=tcpserver,address=*,port=6304? 。配置好后重啟tomcat。

注:6304就是上面說(shuō)的監(jiān)聽(tīng)端口,執(zhí)行ant dump命令時(shí)就是從這個(gè)端口下載數(shù)據(jù)。-javaagent:/opt/test/libs/jacocoagent.jar是上面說(shuō)到的jacoco的客戶端jar包,這個(gè)放在tomcat的服務(wù)器上。includes:表示針對(duì)指定的class進(jìn)行覆蓋率數(shù)據(jù)收集、output=file/tcpserver/tcpclient:覆蓋率數(shù)據(jù)輸出的形式,分別為file,tcpserver和tcpclient,file是比較簡(jiǎn)單的方式,tcp的方式可支持自行開(kāi)發(fā)獲取覆蓋率數(shù)據(jù)的工具。不設(shè)置默認(rèn)是file。tcpserver: The agent listens for incoming connections on the TCP port specified by the address and port attribute. Execution data is written to this TCP connection.(代理監(jiān)聽(tīng)特定ip、端口號(hào)下的tcp連接,代碼執(zhí)行數(shù)據(jù)被寫在了這個(gè)tcp連接中。) 這種方式不需要不需要重啟tomcat。

4、jerkins服務(wù)器的workspace目錄下創(chuàng)建ant的build.xml文件(這個(gè)文件也可以通過(guò)svn來(lái)管理)。build.xml文件的具體內(nèi)容,后面會(huì)貼出來(lái)。

5.安裝Jenkins的jacoco插件JaCoCo plugin

6、配置jenkins

解釋下,這里要指定,生成的exec文件的路徑,源碼的路徑,這個(gè) 插件可以解析出易讀的覆蓋率報(bào)告。

7、配置ant執(zhí)行命令這條命令就是去遠(yuǎn)程服務(wù)器去覆蓋率的命令,jacoco獲取覆蓋率不是實(shí)時(shí)的哦,執(zhí)行命令是其中一種方法,還有一種方法是關(guān)閉tomcat。

8、構(gòu)建job,會(huì)生成jacoco的圖形分析結(jié)果,可看詳細(xì)的覆蓋率我就不截圖展示了。


對(duì)于代碼覆蓋率,這只是jacoco最簡(jiǎn)單的用法,這只是實(shí)驗(yàn)性的,對(duì)于一個(gè)公司來(lái)講,必須要形成統(tǒng)一解決方案,以便推廣使用,必須有必要的腳本與代碼的支持,或者接入公司的平臺(tái)。玩法很多,個(gè)人認(rèn)為于jenkins集成是一種性價(jià)比高的做法,但是靈活性不高,也不適合做后期的數(shù)據(jù)分析,若有條件,可以專門做一些開(kāi)發(fā),最好集成到平臺(tái),做數(shù)據(jù)收集,這對(duì)后期的數(shù)據(jù)驅(qū)動(dòng)是十分有幫助的,當(dāng)然,如果沒(méi)有條件的話,jenkins集成用一用也是可以接受的。


build.xml有空我貼一份上來(lái)吧,也可以網(wǎng)上下載一個(gè)照著添添。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,948評(píng)論 18 139
  • 軟件的持續(xù)集成工具之一,易上手,功能強(qiáng)大,話不多說(shuō),干貨奉上。我的博客地址:http://blog.lzoro.c...
    格子Lin閱讀 12,271評(píng)論 10 41
  • Java Jacoco Ant Maven 針對(duì) Jacoco[http://www.eclemma.org/ja...
    納愛(ài)斯閱讀 53,646評(píng)論 64 52
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,958評(píng)論 6 342
  • 五律.冬日詠蘭所作之二 種蘭于露臺(tái),把酒獨(dú)徘徊。 兩日三回顧,忽若次弟開(kāi)。 靜心花不負(fù),憐香人莫哀。 君身氣若蘭,...
    元?jiǎng)偯纷?/span>閱讀 282評(píng)論 0 3