iOS程式碼涵蓋範圍測試載入器

來源:互聯網
上載者:User

標籤:

基於lcov-1.11的:CodeCoverage4iOS 

閱讀目錄

  • 環境準備
  • Xcode工程配置
  • 構建並安裝程式
  • 收集程式碼涵蓋範圍
  • 過濾結果
  • 合并多個Coverage.info?件?成覆蓋率報告:
  • 參考文獻

iOS code coverage test tool.

基於lcov-1.11的iOS程式碼涵蓋範圍測試載入器,適用與iOS真機與模擬器。

環境準備

Mac OS X :10.8.5+ 建議10.9

Xcode :5.0+ 建議6.1

回到頂部Xcode工程配置
  1. 拷貝CodeCoverage4iOS項目到主工程根目錄,即${your_proj.xcworkspace}所在目錄

  2. 在Xcode中設定全域變數 NT_COVERAGE=1,用於程式碼涵蓋範圍開關控制,如配置路徑 iOSProj —> TARGTS -> MyApp -> Build Settings -> Preprocessor Macros -> Debug中添加NT_COVERAGE=1

  3. 對主工程及依賴工程在Build Settings做如下配置:

    • Generate Debug Symbols 配置成YES
    • Generate Test Coverage Files 配置成YES
    • Instrument Program Flow 配置成YES

    例如:iOSProj —> TARGTS -> MyApp -> Build Settings -> Generate Debug Symbols

    以上配置建議僅在Debug下配置為YES,避免影響Release打包

  4. 在AppDelegate.m中添加如下代碼:

    ?
    12345678910111213141516 - (void)applicationDidEnterBackground:(UIApplication *)application{    ...    #if NT_COVERAGE        #if !TARGET_IPHONE_SIMULATOR            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);            NSString *documentsDirectory = [paths objectAtIndex:0];            setenv("GCOV_PREFIX", [documentsDirectory cStringUsingEncoding:NSUTF8StringEncoding], 1);            setenv("GCOV_PREFIX_STRIP", "13", 1);        #endif         extern void __gcov_flush(void);        __gcov_flush();    #endif    ...}

    當程式被拉到後台時調用__gcov_flush()產生.gcda檔案,此檔案中記錄了程式碼涵蓋範圍,注意__gcov_flush()可重複調用,記錄為追加寫。

    • iOS Simulator : .gcda檔案會產生到預設路徑~/Library/Developer/Xcode/DerivedData/iOSProj-cndbgdtazzzhaebuyvgjsqmkvwdr/Build/Intermediates/MyApp.build/Debug-iphonesimulator/MyApp.build/Objects-normal/i386·下
    • iPhone : .gcda檔案會產生到對應App沙箱Document/${CURRENT_ARCH}/
  5. Build Phases中添加執行指令碼:

    TARGTS -> MyApp -> Build Phases -> New Run Script Phase中編輯Run Script 添加 CodeCoverage4iOS/exportenv.sh

    注意 : 要求對主工程及依賴工程都需要做此配置,主要指令碼執行路徑為相對路徑,比如依賴工程與主工程同級目錄,那麼需要將指令碼路徑修改為相對路徑../CodeCoverage4iOS/exportenv.sh

回到頂部構建並安裝程式

完成以上配置可以對Xcode工程進行構建,在使用Xcode安裝app前確保CodeCoverage4iOS目錄下envs.sh檔案已刪除

注意 : 如果只執?BuildCommand+B也會產?envs.sh檔案,建議Build成功後檢查刪除envs.sh?件,再執?Command+R,確保envs.sh沒有上次build產生的殘餘內容。

回到頂部收集程式碼涵蓋範圍
  1. APP安裝成功後可以對進行相應的測試操作,完成操作後點擊Home鍵,此時程式會產生.gcda檔案到對應目錄。
  2. 產生覆蓋率報告:

    • iOS Simulator : 如果測試裝置為iOS類比機可直接雙擊執行CodeCoverage4iOS/getcov
    • iPhone : 如果測試裝置為iPhone真機,首先需要從沙箱Document/${CURRENT_ARCH}下拷貝.gcda檔案到CodeCoverage4iOS/gcda下,再執行CodeCoverage4iOS/getcov

    執行CodeCoverage4iOS/getcov過程中會在目錄CodeCoverage4iOS/coverage下產生coverage.info檔案,根據coverage.info檔案產生最終報告。PS:如果需要合并測試結果,需要保留此檔案

    測試報告產生路徑:CodeCoverage4iOS/report/index.html

回到頂部過濾結果

如果需要對收集的覆蓋率結果進行過濾,可以編輯CodeCoverage4iOS/getcov中的函數exclude_data()

?
123456 exclude_data(){    LCOV --remove $COVERAGE_INFO_DIR/${LCOV_INFO} "Developer/SDKs/*" -d "${OBJ_DIR}" -o $COVERAGE_INFO_DIR/${LCOV_INFO}    LCOV --remove $COVERAGE_INFO_DIR/${LCOV_INFO} "main.m" -d "${OBJ_DIR}" -o $COVERAGE_INFO_DIR/${LCOV_INFO}    # Remove other patterns here...}
回到頂部合并多個Coverage.info?件?成覆蓋率報告:
  1. 將Coverage.info檔案全部放置到CodeCoverage4iOS/coverage下,如 Coverage1.info、Coverage2.info、Coverage3.info
  2. 執行CodeCoverage4iOS/mergecov 產生合并後的報告
回到頂部參考文獻

https://developer.apple.com/library/ios/qa/qa1514/_index.html

http://qualitycoding.org/xcode-code-coverage/



項目首頁:http://www.open-open.com/lib/view/home/1417661077558

iOS程式碼涵蓋範圍測試載入器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.