本文主要介紹如何對iOS客戶端項(xiàng)目集成代碼覆蓋率檢測,使用了Gcov工具來完成。
*主要支持Objective-C(目前貌似不支持Swift)
*適合大部分代碼為OC語言編寫的項(xiàng)目。
一、項(xiàng)目集成
1.項(xiàng)目設(shè)置
Generate Legacy Test Coverage Files
Instrument Program Flow
把這兩項(xiàng)參數(shù)設(shè)置成YES,找不到的話請看圖(注意細(xì)節(jié))


為了能夠在真機(jī)上把文件取出來,需要配置plist打開文件共享
該設(shè)置允許iTunes或者Xcode、電腦助手等軟件看到該App的沙盒中的共享文件目錄。

2.配置Gcov
在AppDelegate.m的didFinishLaunchingWithOptions函數(shù)中,加入以下代碼:
NSString *covFilePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/xperia_coverage_files"];
?setenv("GCOV_PREFIX", [covFilePath cStringUsingEncoding: NSUTF8StringEncoding], 1);
setenv("GCOV_PREFIX_STRIP", "1", 1);
第一行代碼是設(shè)置代碼覆蓋的結(jié)果文件放在App沙盒文件目錄的位置(Documents下面新建xperia_coverage_files文件夾)
3.在需要采集覆蓋率的地方加入代碼
ps:也就是執(zhí)行完測試之后要走的代碼,目的是將代碼執(zhí)行情況刷入文件存儲起來。
extern void __gcov_flush(void);
__gcov_flush();
比如在viewDidload()函數(shù)或者app準(zhǔn)備切到后臺的時(shí)候來采集。
二、結(jié)果數(shù)據(jù)收集
4.采集gcda文件
連接Xcode,打開Window->Devices and Simulators
找到對應(yīng)設(shè)備的對應(yīng)App的container內(nèi)容,進(jìn)行下載:


5.采集gcno文件

打開Finder,按下Shift+Command+H,然后
逐步進(jìn)入:/Users/lipeng/Library/Developer/Xcode/DerivedData/CodeCov-fjkssrrlmpdspdgtdoyyhsuhrocu/Build/Intermediates.noindex/CodeCov.build/Debug-iphoneos/CodeCov.build/Objects-normal/arm64
項(xiàng)目名稱可能不同,通過文件夾修改時(shí)間也可以確認(rèn)是在哪個(gè)文件夾下。
6.將所有的gcda文件和gcno文件放到一個(gè)文件夾下。
Lcov的使用
7.如果Mac上命令行輸入lcov提示command not found,也就是沒有安裝lcov
lcov官網(wǎng)? http://ltp.sourceforge.net/coverage/lcov.php
可以直接通過
brew install lcov
來安裝lcov。
要是連homebrew都沒了解,那我不解釋了。。。??
8.合成采集的代碼覆蓋信息到輸出文件
lcov -c -d . -o myGcovResult.info
9.生成html文件
當(dāng)前所在文件夾是放好gcno和gcda的CodeCoverageFiles文件夾。
genhtml -o html myGcovResult.info
結(jié)果如圖所示:


打開html文件夾中的index.html
A.全局結(jié)果

B.單個(gè)文件覆蓋率
(溫馨提示:點(diǎn)擊各個(gè)文件名可以進(jìn)入到詳情)

Congratulations !??????
未完待續(xù):
將gcno文件打包,gcda文件打包。
在服務(wù)器上生成對應(yīng)的代碼覆蓋結(jié)果。