iOS-客戶端代碼覆蓋測試(Gcov)

本文主要介紹如何對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é))

項(xiàng)目設(shè)置1
項(xiàng)目設(shè)置2

為了能夠在真機(jī)上把文件取出來,需要配置plist打開文件共享

該設(shè)置允許iTunes或者Xcode、電腦助手等軟件看到該App的沙盒中的共享文件目錄。

項(xiàng)目設(shè)置3

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)行下載:

下載沙盒文件
下載完container后右鍵顯示包內(nèi)容

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é)果如圖所示:

命令行結(jié)果
文件目錄截圖

打開html文件夾中的index.html

A.全局結(jié)果


B.單個(gè)文件覆蓋率

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

Congratulations !??????


未完待續(xù):

將gcno文件打包,gcda文件打包。

在服務(wù)器上生成對應(yīng)的代碼覆蓋結(jié)果。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容