【精准测试】iOS 代码覆盖率数据采集自动化实践

简介: 《简单两步实现 Jacoco+Android 代码覆盖率的接入!(最新最全版)》介绍了如何实现Android端的代码覆盖率接入,基于同样的背景我们也需要实现iOS端的代码覆盖率数据采集。

实践


这里我是基于XcodeCoverage这个工具实现的,目前这个工具只支持Objective-C的覆盖率数据采集,暂时不支持Swift。


打覆盖率包

1、首先将项目clone到本地,项目地址如下:

https://github.com/jonreid/XcodeCoverage

2、将XcodeCoverage整个文件夹放到应用项目的Xcode工程同级目录下,如下图:

image.png

3、在自己的工程中配置运行脚本,如下图:

image.png

image.png

4、在项目的Build Settings中做一些配置,首先是将 Generate Debug Symbols 配置成YES,如下图:

image.png

其次是将 Generate Legacy Test Coverage Files 配置成YES,如下图:

image.png

接着将 Instrument Program Flow 配置成YES,如下图:

image.png

最后给 Preprocessor Macros 增加一个字段 COVERAGE=1,如下图:

image.png

image.png

5、在项目源码中添加生成覆盖率的相关代码,这里我们在应用退出的时候调用__gcov_flush() 来生成.gcda文件,这个文件中记录了我们应用的代码覆盖率数据,具体代码如下:

注意:__gcov_flush() 方法可重复调用,覆盖率数据会累计。

#if COVERAGE
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *documentsDirectory = [paths objectAtIndex:0];
  setenv("GCOV_PREFIX", [documentsDirectory cStringUsingEncoding:NSUTF8StringEncoding], 1);
  setenv("GCOV_PREFIX_STRIP", "13", 1);
  extern void __gcov_flush(void);
  __gcov_flush();
#endif

image.png


6、编译运行并打包,然后装到手机上使用即可。


提取.gcda文件

在手机上运行应用,然后执行手工测试或者自动化测试用例,完成后退出应用 .gcda文件就会自动生成到我们应用的沙盒中,那么接下来就是怎么提取这个文件了,有两种方式:


1、手动提取,通过Xcode下载手机中应用的沙盒文件即可,如下图:

image.png

2、自动提取

这里用到了挂载文件系统工具:ifuse

brew cask install osxfuse
brew install ifuse

遇到的问题:

ifuse has been disabled because it requires closed-source macFUSE

查看ifuse的源码可以看到下面这段代码,可见在2021-04-08之后,安装ifuse会显示 disable,这个时候只需要修改系统时间到这个日期时间之前就可以正常安装了。

on_macos do    
disable! date: "2021-04-08", because: "requires FUSE" 
end

接着先在我们的电脑上创建一个挂载点目录:

mkdir Enesco

然后执行挂载命令

ifuse Enesco

如果想要卸载挂载点,只需要执行下面的命令即可:

umount Enesco

如果想要挂载某个设备的某个应用的documents目录,执行下面的命令:

ifuse -u 00008030-000C10A90C29802E --documents com.estgroupe.estmusicplayer Enesco

遇到的问题:

ERROR: InstallationLookupFailed
The App 'com.estgroupe.estmusicplayer' is either not present on the device, or the 'UIFileSharingEnabled' key is not set in its Info.plist. Starting with iOS 8.3 this key is mandatory to allow access to an app's Documents folder.

报这个错是因为我们应用没有开启文件共享,需要在应用项目的 info.plist 中添加一下如下图红框部分的字段即可:

image.png

打开finder就可以看到应用的documents目录就挂载好了:

image.png

如果想挂载某个应用的整个沙盒目录,需要执行下面的命令:

ifuse -u 00008030-000C10A90C29802E --container com.estgroupe.estmusicplayer Enesco


生成覆盖率报告

打开命令行终端, cd进入项目目录XcodeCoverage, 运行如下命令:

./getcov --show

如下图就是iOS应用的代码覆盖率报告了:

image.png

点击某个文件进入,可以看到具体的代码覆盖率数据:

image.png

image.png

相关文章
|
9天前
|
敏捷开发 jenkins Devops
探索软件测试的新篇章:自动化与持续集成的融合之道
【9月更文挑战第31天】 在软件开发的海洋中,测试是确保航船稳健前行的灯塔。本文将引领读者驶入软件测试的新纪元,探索自动化测试和持续集成如何携手共创高效、可靠的开发流程。我们将从基础概念出发,逐步深入到实际操作层面,揭示这一现代软件开发模式的核心价值和实现路径。你将看到,通过代码示例和实践案例,如何将理论转化为提升软件质量的具体行动。
|
1天前
|
设计模式 敏捷开发 Java
软件测试中的自动化测试实践指南
本文旨在探讨软件测试领域中的自动化测试。通过详细的案例分析和步骤讲解,帮助读者掌握自动化测试的实施方法与最佳实践。
20 10
|
1天前
|
XML 前端开发 数据格式
Ruby脚本:自动化网页图像下载的实践案例
Ruby脚本:自动化网页图像下载的实践案例
|
4天前
|
运维 Devops jenkins
DevOps实践:自动化部署与持续集成的实现
【9月更文挑战第36天】本文通过深入浅出的方式,向读者展示了在现代软件开发中,DevOps如何通过自动化部署和持续集成提高开发效率和软件质量。文章不仅介绍了相关概念,还提供了实用的代码示例,帮助读者理解如何在实际工作中应用这些技术。
|
5天前
|
机器学习/深度学习 存储 监控
深入解析软件测试中的自动化测试技术
本文旨在全面探讨软件测试中的自动化测试技术。通过对自动化测试的定义、优势、常见工具和实施步骤的详细阐述,帮助读者更好地理解和应用自动化测试。同时,本文还将讨论自动化测试的局限性及未来发展趋势,为软件测试人员提供有益的参考。
24 6
|
1天前
|
敏捷开发 监控 测试技术
深入理解自动化测试:从理论到实践
自动化测试在软件开发中扮演着至关重要的角色,它不仅提高了测试效率,还确保了软件质量的一致性和可靠性。本文将引导你了解自动化测试的核心概念,探讨其在不同开发阶段的应用,并通过一个简单的代码示例,展示如何实现一个基本的自动化测试脚本。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技能。
|
1天前
|
运维 Devops jenkins
DevOps实践:自动化部署与持续集成的实现之旅
本文旨在通过一个实际案例,向读者展示如何将DevOps理念融入日常工作中,实现自动化部署和持续集成。我们将从DevOps的基础概念出发,逐步深入到工具的选择、环境的搭建,以及流程的优化,最终实现一个简单而高效的自动化部署流程。文章不仅提供代码示例,更注重于实践中的思考和问题解决,帮助团队提高软件开发和运维的效率。
|
1天前
|
敏捷开发 测试技术 持续交付
软件测试中的自动化策略与实践
在软件开发的海洋中,自动化测试是一艘能够带领团队高效航行的帆船。它不仅能提升测试效率,还能保证软件质量的稳定性。本文将通过深入浅出的方式,带你了解自动化测试的核心概念、工具选择、框架搭建,以及如何将自动化测试融入日常开发流程中,让你的开发团队乘风破浪,驶向成功的彼岸。
|
10天前
|
监控 Devops 测试技术
DevOps实践:持续集成与部署的自动化之路
【9月更文挑战第30天】在软件工程的世界中,DevOps已成为提升开发效率、确保软件质量和加快交付速度的关键策略。本文将深入探讨如何通过自动化工具和流程实现持续集成(CI)与持续部署(CD),从而优化软件开发周期。我们将从基础概念出发,逐步深入到实际操作,最终展示如何构建一个高效的自动化流水线,以支持快速迭代和高质量发布。
35 7
|
8天前
|
设计模式 敏捷开发 jenkins
软件测试中的自动化测试实践指南
本文旨在探讨软件测试中自动化测试的实施方法及其重要性,通过具体案例分析自动化测试的步骤、工具选择及最佳实践。我们将从自动化测试的基本概念入手,逐步解析其在实际项目中的应用,并提供一些常见问题的解决方案。