注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

XcodeCoverage在iOS测试中的应用---真机和Simulator  

来自fengchao   2016-08-15 19:46:57|  分类: 移动APP |举报 |字号 订阅

  下载LOFTER 我的照片书  |
设备信息:
Mac OS版本:10.11.2
Xcode版本:7.3.1
Xcode配置:
  1. 拷贝XcodeCoverage项目(https://github.com/jonreid/XcodeCoverage)到待测项目的根目录下,也即是${your_proj.xcworkspace}所在的目录;
  2. 设置全局变量NT_COVERAGE=1,作为代码覆盖率的开关:左侧边栏选择yourProj,接着右侧TARGETS下选择yourAPP,点击Build Settings,然后搜索Preprocessor Macros,为Debug增加NT_COVERAGE=1(yourProj->TARGETS->yourAPP->Build Settings->Preprocessor Macros->Debug
  3. 设置主工程的Build Settings(一般设置Debug下的配置,不要影响Release):
    1. Generate Debug Symbols 设置为YES;
    2. Generate Legacy Test Coverage Files (和GCC flag的-ftest-coverage相对应)设置为YES:当编译项目源码的时候,就会产生.gcno文件(contain the information needed to build the execution graph and reconstruct the line numbers);
    3. Instrument Program Flow (GCC flag的-fprofile-arcs相对应)设置为YES:运行APP的时候,就会产生.gcda文件(contain the number of transitions on different arcs of the graph and other summary information);
  4. 设置脚本文件:
    1. yourProj->TARGETS->yourAPP->Build Phases,点击左上角“+”按钮增加Run Script,输入“XcodeCoverage/exportenv.sh”。这样,每次编译源码后,都会在XcodeCoverage的根目录生成一个env.sh的文件,用于保存.gcno文件和.gcda文件的路径信息,后续在执行getcov命令的时候,就不会在Mac根目录下“/”搜索.gcno文件和.gcda文件,极大提高了效率;当然,每次测试前要根据自己的需求来决定是否将上一次生成的env.sh删除。XcodeCoverage在iOS测试中的应用-代码覆盖率统计 - 网易杭州QA - 网易杭州 QA Team
       
    2. Edit scheme:点击展开Test,再选中Test下的Test,选中Gather coverage data;再选中Post-actionsProvide build settings from 设置为yourAPP,并且增加脚本 “${SRCROOT}/XcodeCoverage/exportenv.sh
XcodeCoverage在iOS测试中的应用-代码覆盖率统计 - 网易杭州QA - 网易杭州 QA Team
 
XcodeCoverage在iOS测试中的应用-代码覆盖率统计 - 网易杭州QA - 网易杭州 QA Team
5. 修改AppDelegate.m文件,在函数applicationDidEnterBackground()添加以下代码:当是真机的时候,修改 .gcda文件的保存路径;当程序被切换到后台的时候,__gcov_flush()被调用来生成.gcda文件
    1. 在iOS Simulator下,.gcda.gcno默认保存在

      ~/Library/Developer/Xcode/DerivedData/yourProj-ecvkwdnkgamoklanvthocdxwmbrk/Build/Intermediates/yourProj.build/Debug-iphonesimulator/yourProj.build/Objects-normal/x86_64(该路径可以在生成的文件env.sh中找到:${OBJECT_FILE_DIR_normal/CURRENT_ARCH})。

    2. 在iOS真机设备下,.gcda文件会保存在APP沙盒Document/${CURRENT_ARCH}/下。.gcno等文件会保存在~/Library/Developer/Xcode/DerivedData/yourProj-ecvkwdnkgamoklanvthocdxwmbrk/Build/Intermediates/yourProj.build/Debug-iphoneos/yourProj.build/Objects-normal/arm64(文件env.sh中${OBJECT_FILE_DIR_normal/CURRENT_ARCH})。

#if NT_COVERAGE//全局变量是否打开

        #if !TARGET_IPHONE_SIMULATOR//是否为真机

            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);//获取Document的路径

            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

收集测试覆盖率文件:
  1. 编译并安装APP到iOS真机上,这时候可以在${OBJECT_FILE_DIR_normal/CURRENT_ARCH}路径下看到.gcno等文件。运行APP执行测试用例后,按HOME键将APP切换到后台,真机下查看APP沙盒Document/${CURRENT_ARCH}/,可以看到有.gcda文件产生。然后,拷贝.gcda文件到.gcno文件所在目录。iOS Simulator的话,.gcda文件和.gcno文件会在同一目录下,无需拷贝
  2. 打开终端,切换目录到${your_proj.xcworkspace}/XcodeCoverage下,执行./getcov -s,Coverage.info 文件和测试报告将会生成在XcodeCoverage下的lcov文件中。另外,如果要合并多次测试结果,每次生成的Coverage.info 文件要保留。
XcodeCoverage在iOS测试中的应用-代码覆盖率统计 - 网易杭州QA - 网易杭州 QA Team

    3.  在结果图中可以看出,覆盖率文件包含了第三方类库。在我们的测试中,可以在待测项目的根目录下增加.xcodecoverageignore文件来排除不需要计算在内的类库:
${SRCROOT}/TestedProject/Machine Files/*
${SRCROOT}/TestedProject/Third-Party/SingleFile.m
${SRCROOT}/TestedProject/Categories/UIImage+IgnoreMe.{h,m}
  评论这张
 
阅读(73)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018