IOS APP 代码覆盖率测试环境搭建详解

发表于:2018-5-02 10:55

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:CONGHUAXIANSHENG    来源:51testing软件测试网采编

  xcode支持统计手动测试的代码覆盖率,对于降低漏测率有显著的帮助,最近想要尝试一下这方面的调研,记录一下自己的实现方法。
  持续更新中。。。。。。
  第一步:安装ruby环境
  mac电脑一般不会自带ruby,需要自己安装,如果已经安装了ruby的可以忽略
  1.安装rvm:$ curl -L https://get.rvm.io | bash -s stable
  2.设载入rvm:$ source ~/.rvm/scripts/rvm
  3.检查是否安装成功:$ rvm -v
  4.查看ruby版本:$ rvm list known
  5.安装ruby:$ rvm install 2.4
  (注意:安装的目标文件夹当前用户必须有write权限,homebrew也要更新到最新版)
  6.查看安装的ruby版本:$ rvm list
  7.将安装的ruby设为系统默认版本:$ rvm 2.0.0 —default
  第二步:安装cocoaPods
  1.命令:sudo gem install cocoapods
  (注意:这里可能需要电脑翻墙,有的人是使用了国内的源:http://code4app.com/article/cocoapods-install-usage)
  第三步:将XcodeCoverage插入到你的项目中
  1.cd到工程路径下,新建一个Podfile文件:  vim Podfile
  2.在文件中加入一行:pod 'XcodeCoverage', ‘~>1.0'
  第三步:将XcodeCoverage插入到你的项目中
  1.cd到工程路径下,新建一个Podfile文件:  vim Podfile
  2.在文件中加入一行:pod 'XcodeCoverage', ‘~>1.0'
  3.运行:pod install
  这时可能会遇到一个问题,报错:error: RPC failed; curl 56 SSLRead() return error -36
  这时因为安装了大于1个Xcode导致的,需要明确一下Xcode路径
  终端输入:sudo xcode-select -switch  /……./Xcode.app/Contents/Developer
  之后重新执行:pod install
  这时还可能会遇到错误:The dependency `XcodeCoverage (~> 1.0)` is not used in any concrete target.原因是最新版本的pop有语法变动还有SDK版本没有做兼容。
  解决方法:vim Podfile
  插入内容:target 'TestApp' do
          pod 'XcodeCoverage', '~>1.0'
          end
          platform :ios, '10.2'
  保存退出重新执行:pod install
  第四步:将待测target改成debug模式
  如下图,需要改2个地方
  这里解释一下target的含义,现在的app都会有不同的版本迭代如:1.0  2.0等,由于现在我使用的app是一个demo,所以只有一个target,可以在上图中的黄色iconTestAPP中切换target。
  此时再检查一下app能否正确在模拟器上运行,我在这里遇到了报错:ld: library not found for -lPods。原因是需要要打开后缀名为xcworkspace的文件运行。IOS项目当运用了cocopods引入第三方时不能打开原样式的文件 
  第五步:项目中插入代码
  在app项目中找到APPDelegate.m文件,修改如下部分:
  - (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
  }
  第六步:在在模拟器中操作
  1.build&run待测app,在模拟器中操作,点击Home键。IOS模拟器的HOME键:command+shift+H
  2.cd 进入    项目/Pod/XcodeCoverage   运行:./getcov —show
  就可以自动生成测试报告
  注:这个时候可能会遇到以下问题
  1.WARNING: no .da files found in /Users。。。。。。。 - skipping!
  2.lcov: ERROR: no valid records found in tracefile coverage.info
  原因主要可能有2点:
  1.lcov-1.12   并不是最新版,只有1.12才开始兼容了ios10
  下载链接:https://github.com/daihongchao/XcodeCoverage
  2.linux环境导致的不适配,解决方法:
  修改/envcov.sh:
  LCOV()
   {
      "${LCOV_PATH}/lcov" “$@"  
  }
  修改/getcov
  "${LCOV_PATH}/genhtml" --ignore-errors source --output-directory . “${LCOV_INFO}"
  问题都解决之后就可以查看到刚才操作的代码覆盖率报告了。


上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号