今天我們給大家分享,如何使用Jacoco集合Git來做增量程式碼的覆蓋率測試。實現的基本原理是:
- 使用Git的diff指令,計算出兩個版本的差異;
- 改造Jacoco原始碼,只針對增量程式碼生成報告。
滴滴的super-jacoco專案已實現了該功能,並把它分裝成了一個服務,下面我們介紹super-jacoco專案的部署。
- 從官網下載、安裝Oracle Java SDK。執行java -version,可輸出版本資訊表示安裝成功。筆者這裡安裝的是JDK 11;
- 從這裡下載解壓Apache Maven構建工具3.9.1版,並將其加入系統PATH環境變數。成功後執行mvn -v,可正確返回版本資訊;
- 安裝、啟動MySQL資料庫,可以從這裡下載免費的社群版;
執行Git克隆命令,獲取專案原始碼;
git clone https://github.com/didi/super-jacoco.git
開啟專案src/main/resources目錄下的application.properties檔案,修改MySQL資料庫連線地址、賬號和密碼;
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/super-jacoco?useUnicode=true&characterEncoding=utf8 spring.datasource.username=user spring.datasource.password=P2ssw0rd
- 執行maven命令,編譯jar包;
mvn package -Dmaven.test.skip=true
- 啟動編譯好的服務jar包;
java -jar super-jacoco.jar
- 如果是使用的IDE,可透過右鍵CodeCovApplication.java檔案啟動服務;
- 服務啟動成功後,會執行一個定時任務來掃描資料庫,以查詢是否有覆蓋率統計的任務需要執行,日誌類似下圖;
- 使用PostMan或命令列工具,傳送“新建覆蓋率統計任務”的請求。請確保引數uuid唯一,成功後返回code 200;
地址:http://127.0.0.1:8899/cov/triggerUnitCover
方法:POST
資料:
{
"uuid": "uuid001",
"type": 1,
"gitUrl": "https://gitee.com/ngtesting/ci_test_jcoco.git",
"subModule": "",
"baseVersion": "v1",
"nowVersion": "v2",
"envType": "-Ptest"
}
- 稍等片刻,會發現控制檯中有發現並執行任務的日誌;
- 任務執行完成後,傳送“獲取覆蓋率報告”的請求到服務;
- 在瀏覽器中開啟返回的報告地址,得到以下頁面。
- 此處為撰寫本文時,可成功執行的被測專案。具體內介紹可參考上一篇文章;
- 有關super-jacoco中增量覆蓋掃描的實現機制,可以參考這篇部落格閱讀相應章節程式碼。