一、iOS 工程配置
參考:https://www.cnblogs.com/zhouxihi/p/11175244.html
二、gcno 文件生成及上傳
gcno 上傳時的參數(shù)列表:
- branch(分支名)
- commitId(當(dāng)前App對應(yīng)的代碼最后一次提交的commitId)
三、 gcda文件生成及上傳
gcda 上傳時的參數(shù)列表:
- uuid(app 的 uuid,用于標(biāo)識不同設(shè)備)

截屏2020-10-14 下午9.48.47.png
四、數(shù)據(jù)解析層
負(fù)責(zé)向數(shù)據(jù)采集層拿到指定版本的覆蓋率中間文件,然后生成對應(yīng)的全量覆蓋率數(shù)據(jù)、增量覆蓋率數(shù)據(jù)。
1. info 文件生成
拿到gcno 和 gcda 文件后,我們可以使用 LCOV 工具(基于gcov )來生成這個源代碼文件的覆蓋率信息。
方案一:直接生成本路徑下所有的(不推薦)
lcov -c -o test.info -d .
??方案二:(有贊方案)制定文件生成,然后合并info
生成覆蓋率:lcov -c --derive-func-data -d $SOURCE -o $DEST_INFO
篩除數(shù)據(jù):lcov -r $SOURCE_INFO '$REGEX' -o $DEST_INFO
合并覆蓋率:lcov -a $SOURCE_INFO_0 -a $SOUCE_INFO_n -o $DEST_INFO
覆蓋率信息.info 文件包含以下內(nèi)容:
- TN:測試用例名稱
- SF:源碼文件路徑
- FN:函數(shù)名及行號
- FNDA:函數(shù)名及執(zhí)行次數(shù)
- FNF:函數(shù)總數(shù)
- FNH:函數(shù)執(zhí)行數(shù)
- DA:代碼行及執(zhí)行次數(shù)
- LF:代碼總行數(shù)
- LH:代碼執(zhí)行行數(shù)
2. 合并覆蓋率(info合并)
lcov -a $SOURCE_INFO_0 -a $SOUCE_INFO_n -o $DEST_INFO
3. lcov文件過濾
git 導(dǎo)出版本之間差異文件:
//查看
git diff 456bcb 93593a --name-only
//導(dǎo)出 test.txt為文件目錄
git diff >test.txt 456bcb 93593a --name-only
//差異文件打包
$ git diff 9d093d01c59cd6f9d0051094a2a7aec27ed3d3e7 003e66916c0567c971e9c315cac69f11b2ffee34 --name-only | xargs tar -czvf ../update.tar.gz
- 移除制定目錄
需要用到--remove參數(shù),以刪除include目錄下所有文件信息為例 :
lcov --remove all.info '*/include/*' '' -o result.info
// all.info 總的覆蓋率信息 result.info 篩選后的覆蓋率信息
- 篩選固定目錄
需要用到--extract參數(shù),以指定samples目錄為例:
lcov --extract test.info '*/Dealer-Ios/classess/MVVM/MVVM-LaunchVC/View/*' -o result.info
//all.info 總的覆蓋率信息 result.info 篩選后的覆蓋率信息
五、數(shù)據(jù)可視化
負(fù)責(zé)將數(shù)據(jù)解析層生成的覆蓋率數(shù)據(jù),以可視化的方式(HTML)展示出來。LCOV 工具支持基于同一份 gcno 加上多份 gcda 的合并,因此,單版本多設(shè)備的全量代碼覆蓋率可可以很快的生成。
genhtml result.info -o output/
??