天天看點

代碼覆寫率工具-jacoco環境搭建分享

1. Jacoco+docker+ant環境搭建

背景: Web多個服務在docker中啟動,服務之間存在依賴關系,啟動端口号以及依賴的鏡像關系都配置在docker-compse.yml檔案中。需要借助代碼覆寫率工具,對後端Java代碼進行覆寫率統計。

環境搭建理想目标是,開啟覆寫率統計工具後,進行API、Web GUI、手工測試和單元測試,都可以統計到覆寫率,且生成直覺的報告,可随時檢視代碼覆寫率進度,清晰解析每行代碼覆寫情況。

調研各代碼覆寫率工具後,最終標明Jacoco進行代碼覆寫率統計,理由如下:

1.Jacoco功能滿足上述代碼覆寫率環境的終極目标;

2.可與jenkins內建;

3.新版本的Jacoco也支援kotlin的代碼統計;

4.目前工具在持續更新中。

1.1 Jacoco環境搭建血淚史

與其他覆寫率工具相比,Jacoco環境搭建較複雜,且依賴源碼。網絡查詢jacoco工具大多與tomcat結合在一起,并且在tomcat中啟動javaagent, 是以最先選擇的也是Jacoco+tomcat的方式,發現流程可通,但覆寫率始終為0,此後先後嘗試了如下三種方案。

代碼覆寫率工具-jacoco環境搭建分享

1.2 搭建步驟

1.2.1 工具安裝

首先伺服器需要安裝jacoco+ant工具,ant用來生成覆寫率報告,ant有遠端的功能,因想與jenkins內建,本文選擇jacoco、ant、jenkins、docker都配置在同一台伺服器上。

工具安裝具體步驟見如下連結:

1.下載下傳Jacoco到伺服器:

https://www.eclemma.org/jacoco/index.html

2.linux上安裝ant:

https://www.cnblogs.com/sell/archive/2013/07/24/3210198.html

注:若是環境中使用tomcat容器,Jacoco安裝和與tomcat內建可參見:

https://www.jianshu.com/p/16a8ce689d60

1.2.2 修改docker配置

​ 網絡查詢到的docker修改大多需要修改docker鏡像,此處隻需要在docker配置檔案docker-compse.yml中添加啟動javaagent,以某一服務為例,新增點如下:

代碼覆寫率工具-jacoco環境搭建分享

圖-1

将jacocoagent.jar拷貝到指定地點,且java啟動Javaagent和服務,Javaagent端口号随意,沒有被占用即可,其他服務修改同上,但是端口号不能相同。

Docker中重新開機修改的服務:1. docker-compose stop 具體服務2. docker-compose up –d 具體服務,使用docker-compose ps檢視服務狀态為UP,且帶有javaagent的程序,具體見圖2。

代碼覆寫率工具-jacoco環境搭建分享

圖-2

注意:

  1. 執行啟動服務指令需要小心,一定要加up –d 具體服務,docker-compose up會重新開機所有服務,而有些服務是不可重新開機的,或者說啟動比較複雜。

2.重新開機服務時,依次各重新開機,不要為了省事,全部down掉,服務間存在依賴,或導緻某些服務啟動報錯。

1.2.3 與jenkins內建

與Jenkins內建的詳細步驟見如下連結:

https://www.jianshu.com/p/e7fc806ea0e0

Jenkins中帶有jacoco分析的插件,可配置後直接生成直覺的覆寫率報告,适用于統計單個項目覆寫率,但是Web存在多個服務場景,如何生成覆寫率報告,此處有兩種方案:

代碼覆寫率工具-jacoco環境搭建分享

1.2.4 本地生成覆寫率報告

本文選擇的是本地生成覆寫率報告的方式,需要修改配置檔案,修改build.xml檔案地方如下:

代碼覆寫率工具-jacoco環境搭建分享

圖-3

  1. 指定Jaococant.jar的路徑。
  2. 指定覆寫率生成的.exec檔案和生成統計報告的路徑,路徑随意,建立檔案夾指定路徑即可。
  3. Ant支援遠端生成報告,此處是本地生成,填寫127.0.0.1,若是遠端添加遠端伺服器的位址。
  4. 配置javaagent的端口,此處端口與1.2.2步驟中docker-compse.yml的javaagent端口号一緻。
代碼覆寫率工具-jacoco環境搭建分享

圖-4

5.指定源代碼的路徑,源碼必須與生成.jar包的源碼完全一緻。

6.指定class檔案的路徑。

代碼覆寫率工具-jacoco環境搭建分享

圖-5

  1. dump指令配置,此處注意append參數的配置說明,目前選擇是true。

merge代碼是合并所有項目的.exec檔案,生成總的代碼覆寫率報告。

代碼覆寫率工具-jacoco環境搭建分享

圖-6

  1. 生成覆寫率報告代碼部分,添加所有項目的資訊,具體圖-6中test1項目。

進入build_jacoco.xml檔案所在目錄,執行ant –f build_jacoco.xml,顯示BUILD SUCCESFUL後,進入生成報告路徑檢視生成的報告,打開index.html有統計資訊即成功。

代碼覆寫率工具-jacoco環境搭建分享

圖-7

  1. 進入具體項目連結,即可觀察每行代碼的覆寫情況,分析未覆寫的代碼增加相應的測試case。

2. 可能遇見的問題

1.若Web服務為叢集環境,需要将其他服務down掉,使所有請求都發往部署jacoco的伺服器上。

2.啟動服務後,開始統計覆寫率,過程中,各個服務最好不要再重新開機。

3.若是生成報告失敗很大可能是端口号連不上,可嘗試修改端口号,build.xml檔案中端口号與docker-compose.yml檔案中javaagent的端口号一緻即可。

4.build指定的源碼和class路徑下檔案需要與生成jar包的源碼檔案完全一緻,否則生成覆寫率報告會報錯。

  1. 引用資料:

    [1]jacoco下載下傳路徑:

[2] Linux環境安裝ant:

[3] jacoco與tomcat內建:

[4] jacoco與jenkins內建:

文章來源:晶片開放社群

文章連結:

https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300636.0.0.1b87180flWxVN5&id=658632213725708288