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

相关文章
|
6天前
|
敏捷开发 测试技术 持续交付
探索软件测试中的自动化与持续集成
在快速迭代的软件开发环境中,自动化测试和持续集成(CI)已成为确保产品质量和加速交付的关键策略。本文将深入探讨自动化测试的基本原理、实施步骤以及它如何与持续集成流程相结合,以提高软件开发的效率和可靠性。我们将通过实际案例分析,展示自动化测试和CI的最佳实践,以及它们如何帮助企业实现更快的市场响应时间和更高的客户满意度。
43 16
|
8天前
|
敏捷开发 人工智能 Devops
探索自动化测试的高效策略与实践###
当今软件开发生命周期中,自动化测试已成为提升效率、保障质量的关键工具。本文深入剖析了自动化测试的核心价值,探讨了一系列高效策略,包括选择合适的自动化框架、设计可维护的测试脚本、集成持续集成/持续部署(CI/CD)流程,以及有效管理和维护测试用例库。通过具体案例分析,揭示了这些策略在实际应用中的成效,为软件测试人员提供了宝贵的经验分享和实践指导。 ###
|
8天前
|
jenkins 测试技术 持续交付
软件测试中的自动化与持续集成:提升效率与质量的关键
在快节奏的软件开发环境中,自动化测试和持续集成已经成为不可或缺的部分。本文将探讨自动化测试和持续集成的重要性,以及它们如何协同工作以提高软件开发的效率和质量。通过分析自动化测试的策略、工具选择以及持续集成的实践,我们将揭示这些技术如何帮助开发团队快速响应变化,减少错误,并加速产品上市时间。
|
7天前
|
人工智能 前端开发 测试技术
探索软件测试中的自动化框架选择与优化策略####
本文深入剖析了当前主流的自动化测试框架,通过对比分析各自的优势、局限性及适用场景,为读者提供了一套系统性的选择与优化指南。文章首先概述了自动化测试的重要性及其在软件开发生命周期中的位置,接着逐一探讨了Selenium、Appium、Cypress等热门框架的特点,并通过实际案例展示了如何根据项目需求灵活选用与配置框架,以提升测试效率和质量。最后,文章还分享了若干最佳实践和未来趋势预测,旨在帮助测试工程师更好地应对复杂多变的测试环境。 ####
29 4
|
7天前
|
机器学习/深度学习 人工智能 jenkins
软件测试中的自动化与持续集成实践
在快速迭代的软件开发过程中,自动化测试和持续集成(CI)是确保代码质量和加速产品上市的关键。本文探讨了自动化测试的重要性、常见的自动化测试工具以及如何将自动化测试整合到持续集成流程中,以提高软件测试的效率和可靠性。通过案例分析,展示了自动化测试和持续集成在实际项目中的应用效果,并提供了实施建议。
|
8天前
|
Java 测试技术 持续交付
探索自动化测试在软件开发中的关键作用与实践
在现代软件开发流程中,自动化测试已成为提升产品质量、加速交付速度的不可或缺的一环。本文深入探讨了自动化测试的重要性,分析了其在不同阶段的应用价值,并结合实际案例阐述了如何有效实施自动化测试策略,以期为读者提供一套可操作的实践指南。
|
3天前
|
敏捷开发 Java 测试技术
软件测试中的自动化策略与实践
在快速迭代的软件开发周期中,自动化测试是确保产品质量和提升开发效率的关键。本文将深入探讨自动化测试的重要性,介绍实用的自动化测试框架,并通过一个具体的代码示例,说明如何实现一个简单的自动化测试脚本。
21 12
|
10天前
|
测试技术 持续交付 Docker
探索软件测试中的自动化策略与挑战
在当今快节奏的软件开发周期中,自动化测试已成为提高产品质量和缩短上市时间的关键。然而,实施有效的自动化测试策略并非易事,它面临着技术选型、脚本维护、环境配置等一系列挑战。本文深入探讨了自动化测试的重要性,分析了常见的自动化测试工具和框架,并讨论了在构建和维护自动化测试体系过程中遇到的主要难题及其解决方案。通过案例分析,本文旨在为软件测试工程师提供实用的指导和建议,以优化他们的自动化测试实践。
|
10天前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
8天前
|
Web App开发 敏捷开发 测试技术
探索自动化测试的奥秘:从理论到实践
【10月更文挑战第39天】在软件质量保障的战场上,自动化测试是提升效率和准确性的利器。本文将深入浅出地介绍自动化测试的基本概念、必要性以及如何实施自动化测试。我们将通过一个实际案例,展示如何利用流行的自动化测试工具Selenium进行网页测试,并分享一些实用的技巧和最佳实践。无论你是新手还是有经验的测试工程师,这篇文章都将为你提供宝贵的知识,帮助你在自动化测试的道路上更进一步。
下一篇
无影云桌面