今年Q3季度领导给加了个任务要作先后端代码覆盖率统计, 鉴于对iOS代码比较熟就选择先从iOS端入手,折腾一成天后终于初步把流程跑通了记录以下html
以上说的几个都不懂也行, 让开发帮忙作这些而后编个代码覆盖率统计的包给你测试, 测完把手机给开发取数据生成报告。 注意每次测试完先按下HOME键把程序退到后台等几秒让app本身生成日志文件git
下面开始讲步骤后端
git clone XXXXXXXXXXX
打开终端, cd到项目路径编辑Podfileapp
vi Podfile
添加:函数
pod 'XcodeCoverage', ‘~>1.0'
运行pod update安装依赖库工具
pod update
1. 使用Xcode打开项目,Targes -> 选择你的APP -> Build Settings -> 搜索Preprocessor Macros -> 展开在Debug一栏加入NT_COVERAGE=1post
注意这里咱们都只修改Debug模式下的属性, 避免影响线上版本的打包发布测试
2. 一样在Build Settings中将如下3项的Debug模式改成Yesui
3. Build Phase中 -> New Run Script Phase -> Run Scrip中添加Pods/XcodeCoverage/exportenv.shurl
这里有个注意的地方, 若是本来项目中已经有一个run script也仍是新建一个
#4. AppDelegate.m中applicationDidEnterBackground方法添加如下代码
#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
选择Debug模式安装到手机或者模拟器上
注意每次完成测试后先按Home键退到后台, 等几秒让APP产生覆盖率日志不要直接杀掉APP进程
若是是在模拟器上运行测试能够跳过此步
1. 打开Xcode -> window -> Devices and Simulaters, 选择运行测试的真机
2. 在Installed Apps中选择测试的应用,而后点击底部的齿轮按钮选择Download Container
3. 会获得一个xxxx.xcappdata文件
4. 右键点击xcappdata文件 -> 显示包内容, 进入AppData/Documents/arm64/, 拷贝里面的全部.gcda文件
5. 进入项目目录/Pods/XcodeCoverage, 打开env.sh, 找到 OBJECT_FILE_DIR_normal属性和CURRENT_ARCH属性的值, 这里要注意下若是CURRENT_ARCH的值是undefined就改为arm64(关键)
6. 打开Finder,使用shift+command+G按钮输入<OBJECT_FILE_DIR_normal>/<CURRENT_ARCH>
,其中 OBJECT_FILE_DIR_normal
及 CURRENT_ARCH
是上一步找到的值,(尖括号注意去掉)
7. 把上面第4步拷贝的全部.gcda文件拷贝到第六步打开的目录中
打开终端, cd进入项目目录/Pods/XcodeCoverage, 运行命令:
./getcov --show
便可自动生成覆盖率报告
整个过程手动操做较多, 能够继续研究下若是实现自动化
其中步骤6可使用ifuse挂在沙盒来实现自动化提取.gcda文件, 方法能够参考下面这篇