前言:
如前面一篇介紹的,增量代碼覆蓋率用的 diff-cover插件。但是展示效果不好,而且還要先生成全量的xml報告;展示效果,與全量報告不一樣,在平台上的展示效果看起來很怪異。繞了一大圈,還是要改造jacoco。
實現:
俗話說,站在巨人的肩膀上,才能站得高,望得遠,跑得快!直接拿 https://github.com/fang-yan-peng/diff-jacoco 進行改造
同時參考:
改造點(前2點屬於bug修復):
1.增加git用戶名、密碼,解決git diff無權限問題。此處硬編碼,有追求的同學可自行抽取
2.解決報錯 Duplicate key org.jacoco.core.internal.diff.MethodInfo。用重載的方法
3.入庫有問題,直接干掉db相關代碼。覆蓋率數據,直接由平台入庫
4.干掉dump二進制文件的代碼。自行生成exec文件,再傳入路徑
5.報告:只顯示/統計,有變更的類
5.1)org.jacoco.core.analysis.Analyzer 增加如下方法
/** * add by danny.yao 2020/08/13,只分析有變化的代碼 * @param file * classes 路徑 * @throws IOException */ public void analyzeClass(final File file) throws IOException { if (file.isDirectory()) { for (final File f : file.listFiles()) { analyzeClass(f); } } else { final InputStream in = new FileInputStream(file); try { analyzeClass(in, file.getPath()); } finally { in.close(); } } }
5.2)org.jacoco.startup.ReportGenerator的方法 analyzeStructure 中,改為調用上面的新方法
5.3)org.jacoco.report.internal.html.page.SourceHighlighter 整個文件還原為 jacoco的官方源碼,同時把測試類 SourceHighlighterTest.java 中報錯代碼注釋掉
報告效果(同一個服務分支,增量/全量對比):
1.全量
2.增量