真机的代码覆盖率测试

发表于:2018-3-16 13:50

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

 作者:落影loyinglin    来源:简书

  代码覆盖率测试
  以前虽然写过单元测试,但很少监测测试的完整程度,测试用例也经常存在重复的情况。这次在测试的要求下开始接入代码覆盖率测试。什么是代码覆盖率?就是测试用例对代码的测试覆盖程度(见代码覆盖率浅谈)。
  这里面会涉及到两种文件,分别是编译时产生的代码结构文件(gcno文件)和运行时产生的代码执行的覆盖率文件(gcda文件)**,下面看看怎么产生gcno文件和gcda文件。
  产生gcno文件和gcda文件
  1、打开Scheme设置页面,添加TestCoverage的Build选项;
  2、打开Xcode的Build Setting,在Generate Test Coverage Files中把TestCoverage设置为Yes;
  3、打开Xcode的Build Setting,在Instrument Program Flow 中把TestCoverage设置为Yes;
  4、代码接入
  首先是添加初始化代码,可以选择在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中调用以下方法(也可以在main.m文件中调用)
  void initTestCoverage(void)
  {
      const char* prefix = "GCOV_PREFIX";
      const char* prefixValue = [[QMFileHelper getSubPathAtDocuments:@"Coverage"] cStringUsingEncoding:NSASCIIStringEncoding];
      const char* prefixStrip = "GCOV_PREFIX_STRIP";
      const char* prefixStripValue = "14";
      setenv(prefix, prefixValue, 1);
      setenv(prefixStrip, prefixStripValue, 1);
  }
  然后在需要产生代码覆盖率的地方调用__gcov_flush()方法产生覆盖率文件,需要注意,必须先添加声明extern void __gcov_flush(void);
  5、查看生成的gcno和gcda文件
  gcno是编译时产生,可以点击Xcode的product文件下的.app文件,右键选择“show in finder”,然后在上级目录的Intermediates文件夹中查找,我的是在
  /Users/loyinglin/Library/Developer/Xcode/DerivedData/Live-abcabcababcabac/Build/Intermediates/Live.build/Debug-iphoneos/Live.build/Objects-normal
  gcda是运行时产生,通过Xcode下载程序运行的沙盒,在Document的Coverage文件夹下可以看到。
  其他问题
  1、gcno和gcda的文件找不到
  检查Xcode的工程设置是否正确(步骤1、2、3设置的属性)
  检查步骤4的代码是否被调用;
  建议先检查gcno是否生成,在查看gcda是否生成;
  2、编译的时候链接失败
  链接时出现以下错误
  Undefined symbols for architecture armv7: "___gcov_flush", referenced from:
  检查步骤2、3设置的属性是否在当前环境下打开;
  3、调用___gcov_flush卡死
  ___gcov_flush是同步方法,并且耗时较长,如果在主线程调用会造成卡死。
  总结
  .gcno文件和.gcda文件可以使用lcov进行解析,实际测试过程中为了方便统一处理,.gcno用脚本zip -j result/gcno_arm64.zip dir/arm64/*.gcno (dir替换为特定地址)进行打包,代码中用MiniZipArchive打包上传,更方便进行统一的测试。
  谨以此篇记录代码覆盖率测试的了解和接入。
  附录——测试相关
  一个好的测试方案能用较短的时间和较少的资源完成测试任务,测试内容包括功能需求测试、代码覆盖测试,最后给出测试的总结和评价。
  自动化测试与手动测试区别:自动化测试用来测试功能的完备性,手动测试用来测试产品的易用性。
  灰度测试:平滑过渡的一种发布方式。iOS最常见的灰度测试就是用越狱平台的用户进行灰度测试。灰度测试可以保证整体系统的稳定,也能测试到在实际运行中的问题。


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

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号