測試開發之單元測試-實現Git增量程式碼的Jacoco覆蓋率統計

陳琦發表於2023-05-11

今天我們給大家分享,如何使用Jacoco集合Git來做增量程式碼的覆蓋率測試。實現的基本原理是:

  1. 使用Git的diff指令,計算出兩個版本的差異;
  2. 改造Jacoco原始碼,只針對增量程式碼生成報告。

滴滴的super-jacoco專案已實現了該功能,並把它分裝成了一個服務,下面我們介紹super-jacoco專案的部署。

  1. 官網下載、安裝Oracle Java SDK。執行java -version,可輸出版本資訊表示安裝成功。筆者這裡安裝的是JDK 11;
    image.png
  2. 這裡下載解壓Apache Maven構建工具3.9.1版,並將其加入系統PATH環境變數。成功後執行mvn -v,可正確返回版本資訊;
    image.png
  3. 安裝、啟動MySQL資料庫,可以從這裡下載免費的社群版;
  4. 執行Git克隆命令,獲取專案原始碼;

    git clone https://github.com/didi/super-jacoco.git
  5. 開啟專案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
  6. 執行maven命令,編譯jar包;
    mvn package -Dmaven.test.skip=true
  7. 啟動編譯好的服務jar包;
    java -jar super-jacoco.jar
  8. 如果是使用的IDE,可透過右鍵CodeCovApplication.java檔案啟動服務;
    image.png
  9. 服務啟動成功後,會執行一個定時任務來掃描資料庫,以查詢是否有覆蓋率統計的任務需要執行,日誌類似下圖;
    image.png
  10. 使用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"
    }

image.png

  1. 稍等片刻,會發現控制檯中有發現並執行任務的日誌;
    image.png
  2. 任務執行完成後,傳送“獲取覆蓋率報告”的請求到服務;
    image.png
  3. 在瀏覽器中開啟返回的報告地址,得到以下頁面。
    image.png
  4. 此處為撰寫本文時,可成功執行的被測專案。具體內介紹可參考上一篇文章
  5. 有關super-jacoco中增量覆蓋掃描的實現機制,可以參考這篇部落格閱讀相應章節程式碼。

專題目錄

相關文章