iOS 应用测试教程:手动与自动化
什么是 iOS 应用测试?
iOS 应用测试是一个测试过程,其中 iOS 应用程序在真实的 Apple 设备上进行测试,以检查它是否按预期工作,针对特定的用户操作,例如安装时间、用户界面、用户体验、外观、行为、功能、加载时间、性能、App Store 列表、操作系统版本支持等。
为什么需要 iOS 应用测试?
iOS 应用测试是必需的,因为 iOS 是苹果的移动应用程序平台,于 2007 年 6 月 29 日发布。与 Android 不同,苹果不授权将 iOS 安装在非苹果硬件上。iOS 和 iOS 应用程序只能安装在苹果设备上,因此,您的 iOS 应用必须与 iOS 版本和 iOS 设备兼容。
这是开发者创建 iOS 应用程序时常见的疑问。
无论您投入多少时间进行设计和实现,错误都是不可避免的,并且会出现缺陷。iOS 应用程序上有一些常见的缺陷。如下图所示。
应用程序崩溃
使用苹果设备时最令人沮丧的问题之一是应用程序在执行过程中可能频繁崩溃。很多时候,应用程序崩溃是因为应用程序中存在一些 bug 或内存泄漏。
应用程序不兼容
您的 iOS 应用程序可能在当前的 iOS 版本上完美运行,但如果 iOS 升级,可能会因为不兼容问题而无法工作。
安全漏洞
iOS 中的安全漏洞允许黑客攻击您的 iOS 设备,窃取您的私人信息。到目前为止,在不同的 iOS 版本中都发现了严重的 iPhone 安全漏洞。
内存泄漏
内存泄漏是指程序不再使用的已分配内存块。内存泄漏会导致您的 iOS 应用程序崩溃。
它们是 bug,应该始终修复。
iOS 测试思维导图
如上图所示,iOS 测试 思维导图显示了测试人员在对 iOS 进行测试时应考虑的所有事项。
iOS 应用程序测试清单
此清单专为测试 iOS 移动应用程序的特性而设计。显然,它只测试通用应用程序特性,而不测试其功能。
- 检查应用程序安装到设备上的时间。确保应用程序在可接受的时间内安装完成。
- 应用程序安装后,检查应用程序是否有应用图标和名称。同时,确保图标和名称都能够自我解释,反映应用程序的核心意图。
- 启动应用程序并检查是否显示启动画面。
- 检查启动画面超时和加载主屏幕所需的时间。应用程序的主屏幕应在可接受的时间内加载。如果主屏幕加载时间过长,用户很有可能会退出甚至卸载应用程序。同时,检查主屏幕中内容的加载方式。
- 应用程序的主要功能应立即显而易见。它应该不言自明。
- 检查应用程序是否支持横向和纵向两种方向。如果支持,请在两种方向上检查应用程序。应用程序的用户界面应相应地进行设置。
- 在没有互联网连接的情况下启动应用程序。确保应用程序按设计/预期行为。有可能在启动时应用程序会崩溃,或者只是显示一个空白屏幕。
- 如果应用程序使用定位服务,则检查是否显示定位权限警报。此警报应只向用户提示一次。
- 如果应用程序发送推送通知,则检查是否显示推送通知权限警报。此警报也应只向用户提示一次。
- 启动应用程序,退出,然后重新启动。检查应用程序行为是否符合设计/预期。
- 通过点击设备的 Home 按钮关闭应用程序,然后再次打开应用程序。检查应用程序是否按设计/预期工作。
- 安装后,检查应用程序是否列在 iPhone 的设置应用程序中。
- 应用程序上线后,检查是否可以在“App Store”中找到该应用程序。应用程序将有支持的操作系统版本。因此,请确保该应用程序可以在这些支持的操作系统版本的设备的“App Store”中找到。同时,该应用程序不应列在不支持的操作系统版本的设备的“App Store”中。
- 检查应用程序在后台运行时是否进入睡眠模式以防止电池耗尽。
- 如果应用程序性能缓慢或加载内容时,检查是否有进度状态图标(“加载中……”),最好附带特定消息。
- 在设备搜索栏中用其名称搜索应用程序。检查应用程序是否列出。
- 检查执行标准操作的按钮在应用程序中的外观是否未更改(例如:刷新、组织、垃圾箱、回复、返回等)
- 检查标准按钮是否未用于其通常用途以外的其他功能。
iOS 测试策略
下图介绍了一些常见的 iOS 测试策略。
自动化测试
自动化测试是 iOS 测试的最大优势。它使您能够快速检测错误和性能问题。自动化测试的好处如下所示
- 自动化测试可以在多个设备上运行,节省您的时间
- 自动化测试可以针对 SDK。您可以在不同的 SDK 版本上运行测试。
- 自动化测试提高了您的测试效率,节省了您的软件开发成本。
- 有许多开源测试框架支持 iOS 上的自动化测试。
使用 OCUnit 进行单元测试
最初的 iOS SDK 发布时,它缺乏单元测试功能。因此,苹果在 iOS SDK 2.2 版本中重新引入了 OCUnit 单元测试解决方案。
OCUnit 是 Mac OS 中用于 C-Objective 的测试框架。OCUnit 框架的最大优势是与 XCode 开发环境的紧密集成,如下图所示。
OCUnit 的一些优点如下图所示。
使用 UIAutomation 进行 UI 测试
UI 自动化是苹果公司提供的一个 JavaScript 库,可用于在真实设备和 iOS 模拟器上执行自动化测试。此框架已添加到 iOS SDK4.0 中。使用 UI 自动化,您不仅可以在模拟器上自动化测试应用程序,还可以在真实设备上进行测试。
UIAutomation 为您带来这些好处
- 减少手动测试的工作量
- 更少使用内存来执行所有测试
- 简化您的 UI 测试过程(只需按一到三个按钮即可运行所有测试套件)
UIAutomation 工具通过用 JavaScript 编写的脚本运行。它模拟目标 iOS 应用程序上的用户事件。
UIAutomation 的优缺点
优点 | 缺点 | |
---|---|---|
1. | 良好支持手势和旋转 | 它不是开源的,开发者支持较少 |
2. | 可以在设备上运行 UIAutomation 测试,而不仅仅是模拟器。 | 无法与其他工具很好地集成 |
3. | 由 JavaScript 开发,它是一种流行的编程语言。 |
上图表示 UIAutomation 框架中的一些常见类。
- UIAElement 类是自动化上下文中所有用户界面元素的超类。
- UIATarget 类表示被测系统的高级用户界面元素。
- UIALogger 类提供关于检索功能的测试和错误信息。
- UIAActivityView 类允许访问和控制应用程序中的活动视图。
- UIAActionSheet 类允许访问和控制应用程序中的操作表。
- 用户事件操作
- UISlider 类
- UIAButton 类
- UIAKey 类
- UIAKeyboard 类
其他自动化测试框架
手动测试
探索性测试
它是一种没有正式测试计划的测试。探索性测试是一种低成本测试方法,但它可能会遗漏您的 iOS 应用程序中的潜在缺陷。
探索性测试的优缺点
优点 | 缺点 | |
---|---|---|
1. | 准备工作少,能及早发现严重缺陷。 | 需要测试人员具备高技能 |
2. | 不需要测试计划以加快缺陷检测。 | 测试覆盖率低。它不保证您的所有需求都经过测试。 |
3. | 大多数缺陷都是通过某种探索性测试及早发现的 | 缺乏测试文档 |
用户测试
用户测试是 iOS 上的一种手动测试。此测试的目的是创建更好的应用程序,而不仅仅是无缺陷的应用程序。下图显示了四种类型的用户测试。
概念测试
在发布到市场之前评估用户对应用程序创意的反应。iOS 上的概念测试程序如下所述
可用性测试
可用性测试是测试您的 iOS 应用程序易用性的方法。在 iOS 测试中,可用性测试可以被记录下来以供记忆或与他人分享。
有一些工具支持 iOS 上的可用性测试。
TryMyUI 移动用户测试应用程序,适用于 Android 和 iOS。
Delight.io,此工具可以捕获您的 iOS 应用上的真实用户交互。
Beta 测试
Beta 测试是使用真实数据进行的集成测试,以获取用户的最终反馈。要分发您的应用程序进行 Beta 测试,您必须遵循以下步骤。
–前置条件:如果您正在对发布候选版本进行 Beta 测试,请务必在分发给测试人员之前验证应用程序。
–通过服务查找测试人员:您从测试人员那里收集设备 ID 并将其添加到会员中心。
–创建 Ad-hoc 分发:Ad Hoc 分发允许测试人员在他们的设备上运行您的应用程序,而无需 Xcode。此步骤包括 2 个子步骤。
- 创建分发证书
- 创建 Ad-hoc 配置文件
–征求测试人员的反馈:测试人员进行测试并向您发送错误报告。您的应用程序发布后,您可以从 iTunes Connect 获取报告。
A/B 测试
A/B 测试是评估您的 iOS 应用有效性的最强大方法之一。它使用两个设备 A 和 B 进行随机实验。
A/B 测试包括三个主要步骤
- 配置测试:准备您的 iOS 应用程序的两个版本(A 和 B)和测试指标。
- 测试:同时在设备上测试上述两个 iOS 应用程序版本。
- 分析:衡量并选择更好的版本发布
以下工具支持 iOS 上的 A/B 测试。
- Arise:适用于 iOS 和 Android 的 A/B 测试。它可以集成到您的 iOS 应用中,使测试过程更快。
A/B 测试的最佳实践
- 定义测试的目标。没有目标,任何测试都是无用的。
- 观察最终用户首次使用您的应用程序。
- 每次更新只运行一个测试。这样可以节省测试时间。
- 仔细监控您的测试。通过监控,您可以从测试中学习经验。
iOS 测试最佳实践
以下是您在组织 iOS 应用程序测试时应该了解的一些提示。
- 在真实设备上测试应用程序以获得真实的性能表现。
- 改进您的测试方法,因为传统测试方法已不足以覆盖 iOS 测试中的所有测试。
- 使用控制台日志测试 iOS 应用程序。这是 iOS 的一项功能,包含来自设备上每个应用程序的信息。
- 使用内置截图命令记录应用程序错误。这有助于开发者了解错误是如何发生的。
- 崩溃报告是测试应用程序时有用的工具。它们可以检测崩溃并记录详细信息,以便您轻松调查错误。
关于 iOS 测试的误区
本节探讨了 iOS 测试的一些常见误区和实际情况。
在 iOS 和 Android 上测试应用程序是一回事。
iOS 和 Android 是由 Apple Inc 和 Google 开发的两个平台。它们完全不同。例如,测试环境、测试框架、编程语言。
在 iOS 模拟器上测试应用程序就足够了。
iOS 模拟器不足以用于应用程序测试。因为 iOS 模拟器有一些限制。
- 硬件限制(摄像头、麦克风输入、传感器)
- 您的应用程序 UI 在模拟器上可能比在设备上运行得更快更流畅。
- API 限制
- 某些框架不受支持(Media Player、Store Kit、Message UI…)
每个人都会在 App Store 下载我的应用,因为它有很多功能。
您的应用程序功能越多,您可能遇到的 bug 就越多。如果您的应用程序仍然存在许多缺陷,用户就不会下载它。