前言
尽早测试,频繁测试,在设备上测试。这是对于Android应用来说最重要的质量保证圣经。
一、测试覆盖率最大化
1. 验证版本并设计冒烟测试
- 除了常规的构建过程,我们也可以制定一套版本验收测试策略(有时也成为版本验证,冒烟测试或健全测试)。版本验收测试的时间很短并且只针对最关键的功能来确定该版本是否足够好,值得完成更全面的测试。这也是在再测试周期之前快速验证bug是否在该版本中已按照预期解决的机会。可以在多个Android平台版本上同时进行版本验收测试。
2. 自动化测试
- 需要频繁的在最高优先级的目标设备上进行版本验收测试。这也是自动化健全测试的理想场景。使用Android SDK 中名为 monkeyrunner 的测试工具运行自动化测试脚本,可以帮助测试团队确定这个版本是否值得进一步测试,减少传给测试团队不良版本的数量。基于Python 的一系列API接口,可以编写出在模拟器和设备上安装和运行应用的脚本,发送特定的按键敲击,并截屏。结合JUnit 单元测试框架,可以开发出强大的自动化测试套件。
3. 在模拟器中测试与在设备中测试
- 当可以获得用户使用的设备时,就把测试精力集中到这上面,但是,真机设备和服务条约通常比较昂贵。你的测试团队不太可能建立一个环境涵盖所有运营商,或发行应用的每一个国家。某些时候Android 模拟器可以有效减少花费,提高测试覆盖率。下面列出的是使用模拟器的一些好处:
–可以模拟出那些获取不到(或者供应短缺)的设备。 –可以做那些在真机设备上无法执行的复杂测试场景 –可以和其他桌面软件一样做自动化测试
4. 测试策略:黑盒测试和白盒测试
Android工具提供了丰富的用于黑盒测试和白盒测试的资源
- 黑盒测试者可能只需要真机设备和测试文档。针对黑盒测试,更重要的是测试员有设备相关的知识,所以提供设备的指导手册和技术文档对测试的准确性也有不小的帮助。此外,了解设备间的细微差别和设备标准可以帮助可用性测试。举例来说,如果设备有一个可用的底座,那么了解清楚它是横向还是纵向的也是很有意义的。
- 白盒测试在移动端并不容易做到。白盒测试员有很多可以利用的工具,包括Android Studio 以及 Android SDK 中的其他很多调试工具。白盒测试员特别经常使用Android 模拟器,Android 设备监视器和 ADB。 它们也可以使用强大的测试 API,如AndroidJUnitRunner,Espresso,uiautomator;以及使用视图层级查看器调试用户界面。对于这些任务,测试人员需要一台开发环境和开发人员相同的电脑,并且需要具备 Java, Python 和其他各种开发人员使用的工具的相关知识。
5. 测试移动应用的服务器和服务
- 对服务器进行版本进行控制。应该像构建流程中其他环节一样管理服务器的部署,服务器应该以一种可再现的方式进行版本管理和部署。
- 使用测试服务器。通常是在控制的环境中的模拟服务器上测试,特别是真实服务器已经在线上为用户服务的情况下。
- 验证可扩展性。测试服务器或者服务的承载能力,包括压力测试(很多用户,模拟器的客户端)
- 验证服务器的安全性(黑客攻击,SQL注入等)
- 确保与服务器双向数据传输是安全的且不易被监听(SSL, HTTPS,有效的证书)。
- 确保应用能优雅地处理远程服务器的维护或服务中断的情况,不论是有计划的还是不可预期的。
- 在新服务器上测试旧版本的客户端来保障它也能正常运行。除了客户端的版本,也需要考虑对客户端和服务器之间的通信协议进行版本化管理。
- 测试服务器的升级以及回滚,并制定一个在服务器崩溃时通知用户的计划。
6. 测试应用的外观视觉和可用性
测试移动应用并不只是找出有问题的功能,同时也要评估应用的可用性——如报告应用中缺少视觉吸引力的地方,或者很难使用的导航。
7. 处理特定的测试场景
除了功能性测试,也要考虑到其他一些特定的测试场景。
8. 测试应用的集成
另一个必要测试的是,应用是如何与Android 系统的其他部分相结合的。如
- 确保应用能正确处理操作系统发出的中断信号(收到短信,来电,关机)
- 验证应用公开的内容提供者数据,包括作为活动文件夹使用
- 验证其他应用通过Intent 触发的事件的处理
- 验证在本应用中通过Intent 触发的事件的处理
- 验证在 Android Manifest.xml 中定义的其他输入点, 如应用的快捷方式。
- 验证应用可选的其他形式, 如应用组件。
- 验证服务相关的功能
9. 测试应用的升级
- 如果可能的话, 就为客户端和服务器端都执行升级测试。如果是有规划升级支持,我们可以开发一个模拟的已升级的应用,这样QA人员就可以验证数据是否正确迁移——即便已升级应用未对这些数据做任何操作。
- 如果应用需要数据库的支持,你需要测试数据库的版本变化。数据库的升级是迁移现有数据,还是删掉数据?迁移工作是从之前的所有版本的应用中到现有版本,还是只迁移最近一次的版本?
10. 测试产品的国际化
11. 测试程序的合法性
- 你要彻底审核应用必须遵守所有策略,许可和条款。举例来说,Android 应用默认情况下必须遵循 Google Play 的开发人员发布许可以及Google Play 的其他服务条款。
12. 安装测试
总的来说,Android 应用的安装是简单直接的, 但是你需要在具有更少资源和内存的设备上进行测试,也应该从不同的应用市场进行测试。如果清单文件中配置允许在外置存储器设备中安装应用,那么还需要针对该场景进行测试。
13. 备份测试
不要忘记测试那些对用户不常见的功能,如备份和还原服务,以及同步功能。
14. 性能测试
- 应用的运行性能在移动世界里是非常重要的。 Android SDK对于收集应用中的性能基准, 监视内存和资源的使用提供了支持。测试人员应该熟悉这些工具并经常使用它们来发现运行瓶颈和危险的内存泄漏,不当的资源使用等异常情况。
- 常见的性能问题是:把所有的工作都放在主线程UI 线程去执行,一些占用时间和资源的任务,如网络下载,XML解析,图像渲染等都应该从主线程移出,这样用户界面才能保持随时响应。
15. 测试应用中的付费机制
16. 测试意外情况
Monkey命令行工具可以帮助测试该类事件。
二、利用Android 的SDK 工具来测试应用
1. 工具简介
- 物理设备来做测试和问题重现
- Android 模拟器来做自动化测试, 或者在设备不可用时测试版本
- Android 设备监视工具可以用来调试, 与模拟器/设备进行交互,也可以用来截屏
- ADB 工具可以做日志跟踪, 调试和访问shell工具
- Exerciser Monkey 命令行工具可以做压力测试(可以通过 adb shell 命令来访问)。
- 通过 monkeyrunner 的API 可以做自动化的单元测试套件, 并编写功能性和框架性单元测试。
- AndroidJUnitRunner API 可用来运行JUnit3 和 JUnit4 的 Instrumentation 测试
- Espresso 功能UI 测试框架
- uiautomator 测试框架, 包括一个命令行工具和一系列 API。 可以在一种或多种设备中做用户界面的自动化测试(编写UI 功能性测试用例)
- UiAutomation 类可以横跨多个应用完成自动化工作和模拟用户交互,并允许你观察用户界面来确定测试是否通过。
- uiautomatorviewer 工具, 通过扫描实际 Android 设备(用于创建详细测试)的屏幕上显示的视图,帮助理解布局的视图层级。
- 通过 logat 命令行工具来查看应用生成的日志信息(最好使用调试版本)。
- traceview 应用,用来查看和解析从应用中生成的日志文件。
- 通过 sqlite3 命令行工具来访问应用中的数据库(利用 adb shell 命令就可以)
- 视图层级查看器工具用来执行用户界面调试,执行性能调整,和获取设备的屏幕截图。
- lint工具, 可以用来优化应用的布局资源。
- systrace 工具,分析应用进程在显示和执行所用的时间
- bmgr 命令行工具, 用来执行备份管理测试。
2. 避免Android 应用测试中的一些低级错误
- 没有像客户端那样彻底地测试服务器或者服务组件。
- 没有使用正确的Android SDK 版本来做测试
- 没有在真机设备中进行测试,认为模拟器就足够了
- 测试所采取的系统和用户使用的不同
- 没有在有足够代表性的设备配置上测试
- 没有完整测试应用的所有入口
- 没有在不同的信号覆盖率以及网络速度下执行测试
- 没有在电池供电的情况下进行测试,测试时不要让设备一直处于充电状态。
参考书籍
Android 6.0 开发秘籍 第5版 郭华丰 刘杰 译
|