最近從QA那里接收到了一個需求孤钦,是對修改過的代碼生成一個類似于Jacoco 的測試覆蓋率報表舅踪,所以在此記錄一下生成的步驟:
-
配置Jacoco
在JVM option中添加:
-javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]
即可儡率。option有很多毫别,我們這里只介紹一下我們配置的部分:destfile
:exec文件輸出路徑食寡,默認是jacoco.execappend
: 如果設置為true
并且執(zhí)行數(shù)據(jù)文件已經存在,那么coverage
數(shù)據(jù)將附加到現(xiàn)有文件中烛恤。如果設置為false
母怜,將替換現(xiàn)有的執(zhí)行數(shù)據(jù)文件,就是每次會生成一個新的,一般是設為true缚柏,不然之前測試的coverage數(shù)據(jù)苹熏,server重啟之后會丟失。默認true
-
output
: 輸出Coverage數(shù)據(jù)的方法:file: 在虛擬機停止的時候會將數(shù)據(jù)寫入到destfile指定的文件币喧,我們目前指定是這個方法轨域。
tcpserve:代理在由address和port屬性指定的TCP端口上偵聽傳入連接。執(zhí)行數(shù)據(jù)將寫入此TCP連接
tcpclient:啟動時杀餐,代理連接到由address和port屬性指定的TCP端口干发。執(zhí)行數(shù)據(jù)將寫入此TCP連接。
none: 不產生任何輸出
excludes
:忽略的Class列表史翘,使用冒號(:)分割枉长,并且可以使用通配符(*和?)琼讽。除性能優(yōu)化或技術特殊情況外必峰,通常不需要此選項。 如果要從報告中排除類別跨琳,請相應地配置相應的報告生成工具自点。
-
生成Coverage Report
這里我們使用的是jacococli.jar 生成的,文檔脉让, 需要jacoco的版本大于0.8.0桂敛, 通過命令
java -jar lib/jacococli.jar report 10_QA_Jacoco/jacoco_exec/*.exec --xml ./coverage.xml --sourcefiles 10_QA_Jacoco/**/src/main/java --classfiles 10_QA_Jacoco/from_server/oocl/
即可生成coverage.xml。 Options的選項可以參考下面這個列表溅潜,我們生成的是xml文件术唬,為了之后生成增量的覆蓋率做準備。Option Description Required Multiple <execfiles> list of JaCoCo *.exec files to read ? --classfiles
location of Java class files ? ? --csv
output file for the CSV report --encoding
source file encoding (by default platform encoding is used) --help
show help --html
output directory for the HTML report --name
name used for this report --quiet
suppress all output on stdout --sourcefiles
location of the source files ? --tabwith
tab stop width for the source pages (default 4) --xml
output file for the XML report -
生成增量覆蓋率報表
這里使用了一個開源的工具diff-cover, 可以結合coverage.xml和git diff來得到新加行以及修改行的覆蓋率報表滚澜。在項目目錄下運行
diff-cover coverage.xml --compare-branch=origin/tmscloud_release --html-report report.html --src-roots biz1/src/main/java biz2/src/main/java
diff-cover 會比較當前分支和
--compare-branch
指定的分支從而得出修改的行粗仓,我們這里指定的release branch,從而得到上次版本之后修改的行设捐。然后結合之前生成coverage.xml. 會生成一個html到--html-report
指定的文件中借浊,其中--src-roots
指定源代碼的相對路徑,對于maven項目來說一定要制定到java
這一層目錄萝招。命令運行完成之后會得到一個report蚂斤。里面有一個table給出了每個文件修改行的覆蓋率和未覆蓋的行,后面還會打印出未覆行的代碼槐沼。
-
顯示未覆蓋行的提交信息和提交者:
上面報告完成之后曙蒸,QA反饋說只顯示了行號捌治,沒有顯示修改行的提交信息(commit message)和提交人(committer)。所以就修改了一下diff-cover的源代碼加了一下這兩個內容纽窟。獲取修改行的提交記錄以及提交人可以使用命令
git blame --incremental -L 20,+1:NtOrderUpdator.java
詳細這里就不說了肖油,可以參考git的文檔git blame,這個命令會打印出以下信息:
d4a9bda57733fdbf7af8f24607a542a6f9ab74d4 18 20 4
author Test
author-mail <Test@oocl.com>
author-time 1589878340
author-tz +0800
committer Tony
committer-mail <Test@oocl.com>
committer-time 1589878340
committer-tz +0800
summary ST245849
filename NtOrderUpdator.java
其中的author就是我們需要的提交者臂港,summary就是我們需要的提交信息森枪,將其解析出來并應用于我們的html報表:
其中紅色就是我們提交信息和提交人,后面緊跟著的就是對應修改行趋艘,這樣我們就可以追蹤未覆蓋的修改行對應的stroy號以及修改人疲恢。