Android 使用自动化框架进行应用程序测试教程

⚡ 智能摘要

Android 应用测试验证构建在分散的设备环境中的有效性,将单元测试、集成测试、操作测试和系统测试与在设备上或直接在 JVM 上运行的自动化框架相结合。

  • 🔘 为什么它的事项: Android 可在无数设备和版本组合上运行,因此兼容性缺陷几乎是不可避免的。
  • ☑️ 四个测试级别: 单元测试、集成测试、运行测试和系统测试分别检测出不同类型的缺陷。
  • 设备端框架: 此 Android 测试框架建立在 JUnit 以及仪器设备。
  • 🧪 JVM替代方案: 机器人阴影 Android 类使得套件可以在 JVM 上运行,而无需设备或模拟器。
  • 🛠️ 更丰富的工具集: Espresso,UI Automator 和 Appium 扩展覆盖范围,使其超出内置类。
  • 📊 需要避免的误区: 仅靠模拟器、少量手机或最后一刻的探索性测试,都会在生产过程中留下缺陷。

Android 应用测试教程,涵盖测试级别、自动化框架和设备覆盖率

Android 测试?

Android 是世界上最大的操作系统。同时, Android 分散的:设备种类繁多,而且 Android 您的应用必须兼容的版本。

无论你在设计和实现上投入多少时间,错误都是不可避免的,漏洞也会出现。

Android 测试策略

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

  1. 单元测试
  2. 集成测试
  3. Opera国家考试
  4. 系统测试

单元测试

单元测试是一组程序,旨在验证源代码的原子单元,例如方法或类。

此 Android 平台已预先集成 JUnit 3.0 框架。这是一个用于自动化的开源框架。 单元测试并且它允许开发人员编写有效的单元测试程序。

单元测试之外,还有用户界面 (UI) 测试。UI 测试涵盖目标应用程序的 UI 组件,并确保应用程序针对设备上的一系列用户操作返回正确的输出。

常见的用户界面操作 Android 应用方式包括点击、输入和滑动

在设备上执行 UI 测试的常用方法是: Android 仪表。但这存在性能问题。进行 UI 测试的最佳工具之一 Android is Robotium.

⚠️ 版本说明: JUnit 3 个类别,例如 仪表测试用例 已在 API 24 中弃用;当前项目使用 AndroidX 测试, Espresso 以及 UI Automator。 Robotium 自 2016 年以来未发行任何作品。

整合测试

In 整合测试所有经过单元测试的模块都已合并并验证。 Android 这通常意味着检查与服务、活动和内容提供程序等组件的集成情况。

集成测试的类型 Android 涵盖服务、活动和内容提供商测试

许多测试框架用于执行集成测试。 Android例如 Troyd、Robolectric 和 Robotium.

Opera国家测试

Opera功能测试,也称为验收测试,是检查应用程序完整性和正确性的高级测试。

In Android, 健身 是一个开源框架,可以方便地针对目标应用程序运行操作测试。

系统测试

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

In Android,系统测试通常包括

  • 图形用户界面测试
  • 可用性测试
  • 性能测试
  • 压力测试

在上面的列表中, 性能测试 更加专注。您可以使用以下工具 Trac查看 对……进行性能测试 Android该工具可以帮助您调试应用程序并分析其性能。 Trac视图现已弃用,取而代之的是 CPU 分析器.

自动化 Android 测试与验证

As Android 由于分散性,需要在多种设备上进行测试,这会增加成本。自动化 Android 检测有助于降低这些成本。

自动化带来的好处 Android 测试

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

我们将研究以下两个框架

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

Android 测试框架

标准测试框架之一 Android 应用程序是 Android 测试框架。它与以下方面完美集成: Android SDK 工具,其架构分为三个部分。

  1. 应用程序包是您需要测试的目标应用程序。
  2. InstrumentationTestRunner 是 测试用例 运行器用于在目标应用程序上执行测试用例。它包括:
    • 测试工具: 用于构建测试的 SDK 工具。它们集成在 IDE 中,也可以从命令行运行。
    • 猴子跑者: 一个提供 API 的工具,用于编写控制程序的程序 Android 设备或模拟器之外 Android 码。
  3. 测试包按测试项目组织,并遵循特定的命名约定。如果被测应用程序的包名为“com.mydomain.myapp”,则测试包应为“com.mydomain.myapp.test”。测试包包含两个对象:
    • 测试用例类: 包括要在目标应用程序上执行的测试方法。
    • 模拟对象: 包含将用作测试用例示例输入的模拟数据。

Android 测试用例类

AndroidTestCase 类图显示了 JUnit 以及仪器测试用例层次结构

  1. 测试用例包括 JUnit 运行的方法 JUnit 实验
  2. 测试套件用于运行一组测试用例
  3. InstrumentationTestSuite 是一个测试套件,它会在运行 InstrumentationTestCase 之前将其注入到 InstrumentationTestCase 中。
  4. InstrumentationTestRunner 在目标应用程序上运行测试用例。
  5. Android测试用例扩展 JUnit 包含访问资源(例如 Activity Context)的方法的测试用例。
  6. ApplicationTestCase 在受控环境中验证 Application 类。
  7. InstrumentationTestCase 验证特定功能或行为,例如应用程序的 UI 输出。
  8. ActivityTestCase 是支持测试应用程序活动的基类。
  9. ProviderTestCase 类用于测试单个 ContentProvider。
  10. ServiceTestCase 在测试环境中测试 Service 类,并支持 Service 生命周期。
  11. SingleLaunchActivityTestCase 用于使用 InstrumentationTestCase 测试单个 Activity。
  12. 活动单元测试用例用于测试单个孤立的活动。
  13. 活动仪器测试用例2扩展 JUnit TestCase 类通过检测功能将您连接到目标应用程序,以便您可以访问 GUI 组件并发送 UI 事件,例如按键或触摸。

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

ActivityInstrumentationTestCase2 示例验证计算器 UI 输出 Android

Robolectric 测试框架

使用以下方法进行测试 Android 使用设备或模拟器进行测试框架开发十分困难。构建和运行测试速度慢,且需要大量的开发工作。为了解决这个问题,还有另一种选择:Robolectric 测试框架。

Robolectric 允许您运行 Android 直接在 JVM 上进行测试,无需设备或模拟器。

Robolectric 测试用例类

Robolectric 可以执行以下操作:

  • 注册并创建 Shadow 类
  • 拦截加载 Android 程
  • 使用 Java坚持重写方法体 Android 程
  • 将阴影对象绑定到 Android 程

这使得被测代码能够在没有干扰的情况下执行。 Android 环境。

其他测试框架

除了上述测试框架之外,还有许多其他的测试框架,例如:

神话 Android 测试与验证

许多企业发展 Android 测试与验证 这些策略都是基于常见的误解。本节探讨了一些流行的误解和现实 Android 测试。

误区一:所有 Android 设备都一样,所以用模拟器测试就足够了。

一个应用程序在模拟器上可能运行完美,但在某些真机上运行时却会崩溃。

Android 在真实设备上运行时显示的应用程序崩溃对话框

模拟器不足以满足您的移动端测试需求。您必须在真机上测试您的应用。

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

由于硬件、屏幕尺寸和内存等因素的差异,您的应用程序在不同设备上的显示效果可能有所不同。请在多种设备、操作系统版本、运营商网络和地理位置上进行测试。

误区三:发布前进行探索性测试就足够了。

  • 大多数测试都是先设计测试用例,然后再执行它们;而探索性测试则是设计和执行同时进行的。
  • 由于没有计划或准备,测试人员可以随意运行他选择的测试用例。有些功能会被反复测试,而有些功能则从未被测试过。

误区四:如果应用程序中存在一些漏洞,用户会理解的。

  • 如果应用程序无法正常运行且存在漏洞,用户会卸载您的应用程序。
  • 质量问题是导致差评的首要原因。 Google 玩弄手段,损害你的声誉,失去客户的信任。

因此,拥有一个合适的……至关重要。 Android 已制定测试策略。

最佳实践 Android 测试与验证

  • 应用程序开发人员应该在编写代码的同时创建测试用例
  • 所有测试用例都应该与源代码一起存储在版本控制系统中。
  • 使用持续集成并在每次更改代码时运行测试
  • 避免仅依赖模拟器和已root的设备;使用诸如检测工具之类的软件在真实硬件上验证结果。 uiautomator查看器

常见问题

不。现代项目使用 AndroidX 测试 JUnit 4和 AndroidJUnit跑步者。 JUnit 这里描述的 3 个测试用例类在 API 24 中已被弃用,仅保留用于旧版测试套件。

机器学习会在布局更改后修复定位器,将重复的崩溃和 ANR 报告分组,并预测更改会破坏哪些测试,以便每次提交运行更短的测试套件。

Copilot 会根据描述的场景编写通用的 onView 和检查模式。它无法获知您的视图标识符或时间信息,因此请先运行每个建议一次,并调整匹配器。

Espresso UI Automator 可在您自己的应用程序内部进行测试,速度快且稳定。它能够跨越应用程序边界,因此适用于通知、设置和系统对话框。许多测试套件都同时使用了这两种工具。

ActivityScenario API AndroidX 测试通常使用 ActivityScenarioRule。它使 Activity 经历已定义的生命周期状态,而无需扩展已弃用的测试用例类。

首先选择一款低端手机、一款中端手机和一款近期推出的旗舰手机,涵盖两到三年的市场周期。 Android 版本,外加一台平板电脑。在发布前添加设备云运行功能,而不是购买更多硬件。

它们在构建机器的 JVM 上使用影子类运行,而不是在真实的设备上运行,因此无需打包、安装或模拟器启动。这使得它们在每次提交后都能实际应用。

Google当前测试库集。它包含 JUnit 以及 Truth 扩展、ActivityScenario、 Espresso UI Automator 位于一个依赖组之后,可在设备、模拟器和 Robolectric 上运行。

总结一下这篇文章: