【精准测试】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

相关文章
|
25天前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
81 8
|
1月前
|
人工智能 JavaScript 前端开发
自动化测试框架的演进与实践###
本文深入探讨了自动化测试框架从诞生至今的发展历程,重点分析了当前主流框架的优势与局限性,并结合实际案例,阐述了如何根据项目需求选择合适的自动化测试策略。文章还展望了未来自动化测试领域的技术趋势,为读者提供了宝贵的实践经验和前瞻性思考。 ###
|
8天前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
96 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
18天前
|
机器学习/深度学习 人工智能 jenkins
探索软件测试中的自动化与持续集成
【10月更文挑战第21天】 在软件开发的生命周期中,软件测试扮演着至关重要的角色。随着技术的进步和开发模式的转变,自动化测试和持续集成已经成为提高软件质量和效率的关键手段。本文将深入探讨自动化测试和持续集成的概念、实施策略以及它们如何相互配合以优化软件开发流程。我们将通过分析实际案例,展示这些技术如何在实际项目中发挥作用,以及面临的挑战和解决方案。此外,文章还将讨论未来趋势,包括人工智能在测试领域的应用前景。
67 17
|
30天前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
29天前
|
运维 监控 持续交付
自动化运维在现代数据中心的应用与实践####
本文探讨了自动化运维技术在现代数据中心中的应用现状与实践案例,分析了其如何提升运维效率、降低成本并增强系统稳定性。通过具体实例,展示了自动化工具如Ansible、Puppet及Docker在环境配置、软件部署、故障恢复等方面的实际应用效果,为读者提供了一套可参考的实施框架。 ####
|
29天前
|
运维 监控 Devops
自动化运维实践:打造高效的DevOps流水线
在软件开发的快节奏中,自动化运维成为提升效率、确保质量的关键。本文将引导你理解自动化运维的价值,通过实际案例分享如何构建一个高效、可靠的DevOps流水线。我们将从持续集成(CI)开始,逐步深入到持续部署(CD),并展示代码示例来具体说明。准备好让你的运维工作飞跃式进步了吗?让我们开始吧!
|
1月前
|
数据管理 测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
在当今快速迭代的软件开发环境中,自动化测试已成为确保软件质量和加速产品上市的关键手段。本文旨在探讨软件测试中的自动化测试策略,包括选择合适的自动化测试工具、构建有效的自动化测试框架以及实施持续集成和持续部署(CI/CD)。通过分析自动化测试的最佳实践,本文为软件开发团队提供了一系列实用的指南,以优化测试流程、提高测试效率并减少人为错误。
65 4
|
1月前
|
监控 测试技术 定位技术
探索软件测试中的自动化测试框架选择与实施###
本文不概述传统意义上的摘要内容,而是直接以一段对话形式引入,旨在激发读者兴趣。想象一下,你是一名勇敢的探险家,面前摆满了各式各样的自动化测试工具地图,每张地图都指向未知的宝藏——高效、精准的软件测试领域。我们将一起踏上这段旅程,探讨如何根据项目特性选择合适的自动化测试框架,并分享实施过程中的关键步骤与避坑指南。 ###
40 4
|
30天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!

热门文章

最新文章