基于lcov-1.11的:CodeCoverage4iOS

 

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中添加如下代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    - (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()

1
2
3
4
5
6
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代码覆盖率测试工具的更多相关文章

  1. [转] Google 开源 iOS 应用测试工具:EarlGrey

    Google 开源 iOS 应用测试工具:EarlGrey oschina 发布于: 2016年02月18日 (3评) 分享到:    收藏 +53 3月19日,深圳源创会火热报名中,go>&g ...

  2. 推荐IOS Moneky测试工具Fast Monkey

    推荐IOS Moneky测试工具Fast Monkey 1 介绍 非插桩 iOS Monkey, 支持控件,每秒4-5 action事件 2 下载 https://github.com/zhangzh ...

  3. 覆盖率测试工具gcov的前端工具_LCOV

    http://my.oschina.net/alphajay/blog/33725 1.Gcov是进行代码运行的覆盖率统计的工具,它随着gcc的发布一起发布的,它的使用也很简单,需要在编译和链接的时候 ...

  4. IOS 可靠性测试 iosMonkey

    UI AutoMonkey UI AUtoMonkey是一款非常简单的IOS压力测试工具.通过它,你可以向ios设备发送滑动.拖动.旋转.甚至锁屏和解锁指令.原文github地址:https://gi ...

  5. Java常用测试工具

    第一部分:九款性能测试 Java入门 如果你才刚开始接触Java世界,那么要做的第一件事情是,安装JDK——Java Development Kit(Java开发工具包),它自带有Java Runti ...

  6. 利用coverage工具进行Python代码覆盖率测试

    Coverage是一种用于统计Python代码覆盖率的工具,通过它可以检测测试代码对被测代码的覆盖率情况. Coverage安装 1.安装命令:pip install coverage 2.查看cov ...

  7. 多测师讲解常用的测试工具分为10类_高级讲师肖sir

    我们将常用的测试工具分为10类. 1. 测试管理工具 2. 接口测试工具 3. 性能测试工具 4. C/S自动化工具 5.白盒测试工具 6.代码扫描工具 7.持续集成工具 8.网络测试工具 9.app ...

  8. Python 代码覆盖率统计工具 coverage.py

    coverage.py是一个用来统计python程序代码覆盖率的工具.它使用起来非常简单,并且支持最终生成界面友好的html报告.在最新版本中,还提供了分支覆盖的功能. 官方网站: http://ne ...

  9. 移动应用开发测试工具Bugtags集成和使用教程

    前段时间,有很多APP突然走红,最终却都是樱花一现.作为一个创业团队,突然爆红是非常难得的机会.然并卵,由于没有经过充分的测试,再加上用户的激增,APP闪退.服务器数据异常等问题就被暴露出来,用户的流 ...

随机推荐

  1. 处理eq问题

    using System;using System.Diagnostics;using System.Drawing;using System.IO;using System.Windows.Form ...

  2. 【原创】Oracle 11g R2 Client安装配置说明(多图详解)

    1. 准备工作 安装Oracle11gR2client的时候,如果刚从网上下载的Oracle client,可能无法再2008 R2或者2012 R2的服务器上面运行. 报错:[INS-13001]环 ...

  3. 【原创】CMD命令设置IP地址

    问题描述 在实际工作中,尤其是像我们这种BI分析人员,在做项目的时候,时常都需要因客户的不同随时切换不同的网络环境,有时可能需要在公司和客户之间来回的穿梭.交替.问题也就随之而来:每次客户那里都需要设 ...

  4. Mysql数据库乱码总结

    今天又独到了Mysql乱码问题,过去总是匆匆的解决了就算了.这次我实在受不了了.每次都是迷迷糊糊的改好的. 这次决定好好探索一把,看了很多资料及博客之后才理解了点.先记录下来.如有不对的请指正. 1. ...

  5. AC日记——Little Elephant and Numbers codeforces 221b

    221B - Little Elephant and Numbers 思路: 水题: 代码: #include <cmath> #include <cstdio> #inclu ...

  6. HDU 1394.Minimum Inversion Number-最小逆序数-完全版线段树(单点增减、区间求和)

    HDU1394.Minimum Inversion Number 这个题求最小逆序数,先建一个空的树,然后每输入一个值,就先查询一下,查询之后,更新线段树,然后遍历一遍,每次将第一个数放到最后之后,减 ...

  7. CodeForces 445B DZY Loves Chemistry (并查集)

    题意: 有N种药剂编号 1 ~ N,然后有M种反应关系,这里有一个试管,开始时危险系数为 1,每当放入的药剂和瓶子里面的药剂发生反应时危险系数会乘以2,否则就不变,给出N个药剂和M种反应关系,求最大的 ...

  8. #424 Div2 C

    #424 Div2 C 题意 给出 k 个分数,初始分数未知,按顺序把这 k 个分数加到初始分数上,已知 n 个加入分数后的结果(无序),问初始分数有多少种可能. 分析 也就是说这 n 个结果,它们之 ...

  9. LA 3026 Period

    这只是蓝书上的一道KMP水题...然后对于最长前缀的循环证明我就不说了... #include<iostream> #include<cstring> #include< ...

  10. [CF3B]Lorry

    题目大意: 有$n(n\leq 10^5)$个物品,背包的容量为$m(m\leq 10^9)$.每个物品有重量$w_i(w_i\in\{1,2\})$和价值$v_i(v_i\leq 10^4)$.问最 ...