iOS代码覆盖率测试工具
基于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工程配置
拷贝CodeCoverage4iOS项目到主工程根目录,即${your_proj.xcworkspace}所在目录
在Xcode中设置全局变量 NT_COVERAGE=1,用于代码覆盖率开关控制,如配置路径
iOSProj —> TARGTS -> MyApp -> Build Settings -> Preprocessor Macros -> Debug中添加NT_COVERAGE=1对主工程及依赖工程在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打包
在AppDelegate.m中添加如下代码:
12345678910111213141516- (void)applicationDidEnterBackground:(UIApplication *)application{...#if NT_COVERAGE#if !TARGET_IPHONE_SIMULATORNSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentsDirectory = [paths objectAtIndex:0];setenv("GCOV_PREFIX", [documentsDirectory cStringUsingEncoding:NSUTF8StringEncoding], 1);setenv("GCOV_PREFIX_STRIP","13", 1);#endifexternvoid__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}/下
- iOS Simulator : .gcda文件会生成到默认路径
在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产生的残余内容。
收集代码覆盖率
- APP安装成功后可以对进行相应的测试操作,完成操作后点击Home键,此时程序会生成.gcda文件到对应目录。
生成覆盖率报告:
- 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- iOS Simulator : 如果测试设备为iOS模拟机可直接双击执行
过滤结果
如果需要对收集的覆盖率结果进行过滤,可以编辑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⽂件⽣成覆盖率报告:
- 将Coverage.info文件全部放置到
CodeCoverage4iOS/coverage下,如Coverage1.info、Coverage2.info、Coverage3.info - 执行
CodeCoverage4iOS/mergecov生成合并后的报告
参考文献
https://developer.apple.com/library/ios/qa/qa1514/_index.html
iOS代码覆盖率测试工具的更多相关文章
- [转] Google 开源 iOS 应用测试工具:EarlGrey
Google 开源 iOS 应用测试工具:EarlGrey oschina 发布于: 2016年02月18日 (3评) 分享到: 收藏 +53 3月19日,深圳源创会火热报名中,go>&g ...
- 推荐IOS Moneky测试工具Fast Monkey
推荐IOS Moneky测试工具Fast Monkey 1 介绍 非插桩 iOS Monkey, 支持控件,每秒4-5 action事件 2 下载 https://github.com/zhangzh ...
- 覆盖率测试工具gcov的前端工具_LCOV
http://my.oschina.net/alphajay/blog/33725 1.Gcov是进行代码运行的覆盖率统计的工具,它随着gcc的发布一起发布的,它的使用也很简单,需要在编译和链接的时候 ...
- IOS 可靠性测试 iosMonkey
UI AutoMonkey UI AUtoMonkey是一款非常简单的IOS压力测试工具.通过它,你可以向ios设备发送滑动.拖动.旋转.甚至锁屏和解锁指令.原文github地址:https://gi ...
- Java常用测试工具
第一部分:九款性能测试 Java入门 如果你才刚开始接触Java世界,那么要做的第一件事情是,安装JDK——Java Development Kit(Java开发工具包),它自带有Java Runti ...
- 利用coverage工具进行Python代码覆盖率测试
Coverage是一种用于统计Python代码覆盖率的工具,通过它可以检测测试代码对被测代码的覆盖率情况. Coverage安装 1.安装命令:pip install coverage 2.查看cov ...
- 多测师讲解常用的测试工具分为10类_高级讲师肖sir
我们将常用的测试工具分为10类. 1. 测试管理工具 2. 接口测试工具 3. 性能测试工具 4. C/S自动化工具 5.白盒测试工具 6.代码扫描工具 7.持续集成工具 8.网络测试工具 9.app ...
- Python 代码覆盖率统计工具 coverage.py
coverage.py是一个用来统计python程序代码覆盖率的工具.它使用起来非常简单,并且支持最终生成界面友好的html报告.在最新版本中,还提供了分支覆盖的功能. 官方网站: http://ne ...
- 移动应用开发测试工具Bugtags集成和使用教程
前段时间,有很多APP突然走红,最终却都是樱花一现.作为一个创业团队,突然爆红是非常难得的机会.然并卵,由于没有经过充分的测试,再加上用户的激增,APP闪退.服务器数据异常等问题就被暴露出来,用户的流 ...
随机推荐
- matlab 分析wav波形
[x,fs,bits]=wavread('d.wav', [1 5000]); % sound(x, fs, bits); N = length(x); n = 0 : N-1; t = n/fs; ...
- 关于backBarButtonItem的N种方法
替换返回按钮的文字 很多app的要求所有的返回按钮的title都是“返回”,如果上一层题目文字太多,下一层的返回按钮文字就会显示不完全,而且这样可以使软件显得整洁. 方法一: 最普通的想法,A界面的n ...
- 有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完?
有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完? 相关问题: (1)有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台 ...
- Appium+python自动化1-环境搭建(上)【转载】
前言 appium可以说是做app最火的一个自动化框架,它的主要优势是支持android和ios,另外脚本语言也是支持java和Python.小编擅长Python,所以接下来的教程是appium+py ...
- idea 创建web工程
相关工具版本 说明:IntelliJ IDEA 版本为2018JDK 版本为1.8tomcat 版本为apache-tomcat-7.0.59 1,创建Project:依次点击File–new Pro ...
- PSR-1 基础编码规范
本篇规范制定了代码基本元素的相关标准, 以确保共享的PHP代码间具有较高程度的技术互通性. 关键词 “必须”("MUST").“一定不可/一定不能”("MUST NOT& ...
- uvalive4108(线段树)
uvalive4108 题意 按顺序给出 n 个矩形,每给出一个矩形,统计它在多长的部分是最高的,并把这个长度称为该矩形的覆盖度,求最后总的覆盖度(每次得到的矩形的覆盖度之和) 分析 线段树.用两个数 ...
- Tarjan缩点【p4819】[中山市选]杀人游戏
Description 一位冷血的杀手潜入Na-wiat,并假装成平民.警察希望能在\(N\)个人里面,查出谁是杀手.警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识的人,谁是杀 ...
- (寒假集训) Piggyback(最短路)
Piggyback 时间限制: 1 Sec 内存限制: 64 MB提交: 3 解决: 3[提交][状态][讨论版] 题目描述 Bessie and her sister Elsie graze i ...
- cake-walk
Of course it was not a cake-walk in the beginning 3. This is going to be a cakewalk 这将易如反掌. 4. Julia ...