單元測試增量代碼覆蓋率統(tǒng)計(jì)方案
作者|陳俊華、劉琳琳
轉(zhuǎn)轉(zhuǎn)增量代碼掃描數(shù)據(jù)作為上線準(zhǔn)入的重要依據(jù),目前所有測試環(huán)境執(zhí)行的測試均有覆蓋率統(tǒng)計(jì),但是部分需求或服務(wù)更加適合使用單測進(jìn)行驗(yàn)證,也有部分RD有單測的好習(xí)慣。單測覆蓋率的缺失無法通過覆蓋率分析補(bǔ)充case也對上線準(zhǔn)入評估造成了一定的困擾。因此,我們將單測的增量代碼覆蓋率融合至測試環(huán)境覆蓋率中,解決以上問題。

1、持續(xù)集成平臺將工程名稱,分支名稱,git地址信息傳給單測平臺,平臺根據(jù)這些信息下載源碼
2、更改源碼里的pom.xml 文件。引用插件maven-surefire-report-plugin

插件的特點(diǎn):
能把生成的xml報告轉(zhuǎn)換成html
能指定哪些測試類需要被執(zhí)行,哪些測試類不被執(zhí)行
能兼容JUnit 3、JUnit 4以及TestNG
在默認(rèn)情況下,我們無法在在某一個生命周期去調(diào)用它,因?yàn)椴⒉皇撬械挠脩裘看螛?gòu)建軟件的時候都會需要html格式
結(jié)果:

打開surefire-report.htm 可以查看執(zhí)行case數(shù)量,執(zhí)行通過率,執(zhí)行失敗的具體方法以及失敗原因。

3、用jacoco生成單元測試覆蓋率
在執(zhí)行mvn命令時,加上“org.jacoco:jacoco-maven-plugin:prepare-agent”參數(shù)即可。

其中,jacoco-maven-plugin后面跟的是jacoco的版本;【-Dmaven.test.failure.ignore=true】建議加上,否則如果單元測試失敗,就會直接中斷,不會產(chǎn)生.exec文件。
執(zhí)行以上命令后,會在當(dāng)前目錄下的target目錄產(chǎn)生一個jacoco.exec文件,該文件就是覆蓋率的文件:

4、生成的jacoco.exec文件傳給覆蓋率統(tǒng)計(jì)系統(tǒng)。
1、增加覆蓋率統(tǒng)計(jì)任務(wù)
用例平臺收到執(zhí)行單測任務(wù)時,會調(diào)用覆蓋率平臺創(chuàng)建覆蓋率任務(wù)接口,將源碼地址,jar包的ftp地址, 以及代碼分支等數(shù)據(jù)傳遞給覆蓋率平臺,覆蓋率平臺建立覆蓋率任務(wù)并做一些提前準(zhǔn)備工作:下載源 碼、jar包以及進(jìn)行codediff,并將diff結(jié)果存到數(shù)據(jù)庫。

2、統(tǒng)計(jì)覆蓋率
回顧一下之前 on-the-fly方式的差異代碼覆蓋率方案,代碼執(zhí)行軌跡是當(dāng)測試人員點(diǎn)擊覆蓋率按鈕時,實(shí)時從測試服務(wù)器上獲取的。

從圖中可以看到,如果我們把測試服務(wù)器的部分任務(wù)由用例平臺來完成,就可以在基本上不變動代碼的情況下完成單測增量代碼覆蓋率的統(tǒng)計(jì)。
主要邏輯:
將編譯id作為虛擬ip
獲取代碼執(zhí)行軌跡時,判斷如果是單測則從用例管理平臺獲取,不是則從測試機(jī)上獲取


至此,整個流程結(jié)束。各位讀者大佬,如果有好的解決方案和建議歡迎留言討論。
