Android应用程序自动化框架

为什么进行Android测试?

Android是世界上最大的操作系统。应用程序必须与大量的设备和Android版本兼容。

Complete Guide to Android Testing & Automation
Complete Guide to Android Testing & Automation

在设计和实现上投入多少时间并不重要,错误是不可避免的,错误也会出现。

Complete Guide to Android Testing & Automation
Complete Guide to Android Testing & Automation

在本教程中,将了解-

  • 为什么进行Android测试?
  • Android测试策略
  • 单元测试
  • 集成测试
  • 系统测试
  • 自动Android测试
  • Android测试框架
  • Robolectric测试框架
  • Android测试的思考
  • Android测试的最佳实践

Android测试策略

正确的Android测试策略应该包括以下内容

  1. 单元测试
  2. 集成测试
  3. 操作测试
  4. 系统测试
Complete Guide to Android Testing & Automation
Complete Guide to Android Testing & Automation

单元测试

单元测试包括由一个或多个程序组成的集合,这些程序旨在验证源代码的原子单元,如方法或类。

Android平台预集成了Junit 3.0框架。它是用于自动化单元测试的开源框架。Android测试框架是开发人员编写有效单元测试程序的有力工具。

Complete Guide to Android Testing & Automation
Complete Guide to Android Testing & Automation

Android与JUnit框架的集成

对单元测试的补充是用户界面(UI)测试。这些UI测试确保应用程序返回正确的UI输出,以响应设备上的用户操作序列。

Complete Guide to Android Testing & Automation
Complete Guide to Android Testing & Automation

应用程序上的常见用户UI操作

在设备上执行UI测试的常见方式是Android Instrumentation。但这有性能问题,在Android上进行UI测试的最佳工具之一是Robotium。

集成测试

在集成测试中,对所有单元测试模块进行组合和验证。在Android中,集成测试通常涉及检查与Android组件的集成,如服务测试、活动测试、内容提供商测试等

Complete Guide to Android Testing & Automation
Complete Guide to Android Testing & Automation

Android集成测试类型

目前已经有很多测试框架用于对Android进行集成测试,如Troyd、Robolectric、Robotium等。

可操作的测试

  • 操作也称为功能测试或接受测试。它们是高级测试,旨在检查应用程序的完整性和正确性。
  • 在Android中,FitNesse是一个开源框架,可以方便地对目标应用进行操作测试。

系统测试

在系统测试中,对系统进行整体测试,检查组件、软件和硬件之间的交互情况。

在Android中,系统测试通常包括

  • GUI测试
  • 可用性测试
  • 性能测试
  • 压力测试

在上面的列表中,性能测试得到了更多的关注。可以使用Traceview等工具对Android进行性能测试,该工具可以帮助调试应用程序并评测其性能。

Android自动化测试

由于Android是碎片化的,在众多设备上进行测试是必要的。自动化Android测试有助于降低成本

自动化Android测试的优势

  • 减少执行测试用例的时间
  • 提高开发过程的生产力
  • 及早发现缺陷,节省软件维护成本
  • 快速找到并修复实现中的错误
  • 确保软件质量

我们将研究以下两个框架

  • Android测试框架
  • Robolectric测试框架

Android测试框架

Android测试框架是Android应用测试的标准框架之一。它是一个功能强大且易于使用的测试框架,与Android SDK工具很好地集成在一起。

Complete Guide to Android Testing & Automation
Complete Guide to Android Testing & Automation

Android测试框架架构

  1. 应用程序包是需要测试的目标应用程序
  2. InstrumentationTestRunner是在目标应用程序上执行测试用例的测试用例运行器。它包括: 2A) 测试工具:用于构建测试的SDK工具。它们集成在Eclipse IDE中或作为命令行运行。 2b) MonkeyRunner:提供API的工具,用于编写在Android代码之外控制Android设备或仿真器的程序。

  3. 测试包被组织到测试项目中。如果被测应用的包名为“com.mydomain.myapp”,则测试包应为“com.mydomain.myapp.test”。测试包包含2个对象,如上所示: 3a)测试用例类:包括要在目标应用程序上执行的测试方法。 3b)模拟对象:包括将用作测试用例的样本输入的模拟数据。

Android测试用例类

Complete Guide to Android Testing & Automation
Complete Guide to Android Testing & Automation

AndroidTestCase类图

  1. TestCase包括运行JUnit测试的JUnit方法
  2. TestSuite用于运行一组测试用例
  3. InstrumentationTestSuite是一个TestSuite,它在运行InstrumentationTestCase之前将Instrumentation注入到InstrumentationTestCase中。
  4. InstrumentationTestRunner是在目标应用程序上执行测试用例的测试用例运行器。
  5. AndroidTestCase扩展了JUnit TestCase。它包含用于访问活动上下文等资源的方法。
  6. ApplicationTestCase验证受控环境中的应用程序类。
  7. InstrumentationTestCase验证目标应用程序的特定功能或行为,例如验证应用程序的UI输出。
  8. ActivityTestCase是支持测试Application活动的基类。
  9. ProviderTestCase是用于测试单个ContentProvider的类。
  10. ServiceTestCase用于测试环境中的服务类。它还支持服务的生命周期。
  11. SingeLauchActivityTestCase用于通过InstrumentationTestCase测试单个活动。
  12. ActivityUnitTestCase 用于测试单个孤立的Activity。
  13. ActivityInstrumentationTestCase2 扩展了JUnit TestCase类。使用此类,可以访问应用程序的GUI组件,并将UI事件(击键或触摸事件)发送到UI。

下面是ActivityInstrumentationTestCase的示例。验证计算器应用程序的UI操作,检查UI输出的正确性。

Complete Guide to Android Testing & Automation
Complete Guide to Android Testing & Automation

ActivityInstrumentationTestCase2测试示例

Robolectric测试框架

使用Android测试框架通过设备或仿真器进行测试很困难。要解决这个问题,还有另一个选择-Robolectric测试框架。

Robolectric框架允许直接在JVM上运行Android测试,而不需要设备或仿真器。

Complete Guide to Android Testing & Automation
Complete Guide to Android Testing & Automation

Robolectric的先进特性

Robolectric测试用例类

Complete Guide to Android Testing & Automation
Complete Guide to Android Testing & Automation

ROBOLECRICE的操作

  • 如上所示,Robolectric可以执行以下操作:
  • 注册并创建阴影类
  • 拦截Android类的加载
  • 使用JavaAssist重写Android类的方法体
  • 将阴影对象绑定到Android类
  • 这允许在没有Android环境的情况下执行测试中的代码。

其他测试框架

除了上面提到的测试框架外,还有许多其他测试框架,例如:

  • Android Junit Report,一个用于Android的自定义工具测试运行器,它生成XML报告以便与其他工具集成。
  • 快递服务
  • Appium应用程序

Android测试的迷思

许多企业开发基于常见误解的Android测试策略。本节研究Android测试的几个流行的神话和现实。

误区1:所有安卓设备都是一样的在仿真器上进行测试就足够了

让我们从一个简单的例子开始。应用程序在仿真器上可以很好地工作,但在某些实际设备上,它在执行过程中会崩溃。

Complete Guide to Android Testing & Automation
Complete Guide to Android Testing & Automation

在真实设备上执行期间应用程序崩溃

仿真器不足以进行移动测试。必须在真实设备上测试应用程序。

误区2:在一些常见设备上进行测试就足够了

  • 在不同的设备上,应用程序看起来不同,因为不同的设备具有不同的硬件、屏幕大小、内存等。必须在不同的设备、操作系统版本、运营商网络和位置上测试应用程序。

误区3:发布前的试探性测试就足够了

  • 通常在所有的测试中,我们设计测试用例,然后执行它们。但是在探索性测试中,测试设计和执行都将一起完成。
  • 在探索性测试中,没有计划,没有准备,测试人员会做他想做的测试。有些功能会重复测试,而有些功能则不会全部测试。

误区4:如果应用程序中有一些错误,用户会理解的

  • 如果应用程序无法运行并有错误,用户可以卸载应用程序
  • 质量问题是应用商店评论不佳的第一个原因。这会影响声誉,会失去客户的信任。

因此,有一个合适的Android测试策略是至关重要的

Android测试的最佳实践

  • 应用程序开发人员应该在编写代码的同时创建测试用例
  • 所有测试用例都应该与源代码一起存储在版本控制中
  • 使用持续集成,并在每次更改代码时运行测试
  • 避免使用模拟器和根设备

IT赶路人

专注IT知识分享