Android测试(二):Android测试基础

时间:2022-09-25 22:12:01

原文地址:https://developer.android.com/training/testing/fundamentals.html

用户在不同的级别上与你的应用产生交互。从按下按钮到将信息下载到他们的设备上,因此,你应该在迭代开发应用程序时测试各种用例和交互。

使用迭代开发工作流

当你的应用程序进行扩展时,你可能会发现需要从服务器获取数据,与设备的传感器进行交互,可以还需要访问本地存储,或呈现复杂的用户界面。应用程序的多样性需要一个全面的测试策略。

在迭代开发一个新的特性时,首先需要编写一个新的测试,或者在现有单元测试中添加新的测试例和断言。测试一开始是失败的,因为这个新特性还没有实现。

在设计新功能时,考虑单元测试的设计很重要。对于每个功能单元编写一个相应的单元测试。你的单元测试应该尽可多的涵盖到所有可能与单元的交互,包括标准的交互、无效的输入、以及资源不可用的情况。

Android测试(二):Android测试基础

图:测试驱动开发:两个周期与迭代过程。

完整的工作流,如上图,包含一系列嵌套的循环迭代。其中长、慢、UI驱动的集成测试,你可以用更短、更快的单元测试驱动开发周期来完成。这一系列循环一直持续到你的应用程序满足每个用例为止。

测试金字塔

Android测试(二):Android测试基础

图:测试金字塔,显示应该在应用程序的测试套件中包含的三个测试类别。

测试金字塔,如上图所示,说明你的应用程序应该如何包括三种类型的测试:小测试、中测试和大测试。

  • 小测试是你可以在与生产系统隔离的情况下运行的单元测试。它们通常会mock所有主要组件,并在PC上快速运行。

  • 中测试是介于小测试和大测试之间的集成测试。它们集成了几个组件,并在Android模拟器或真实设备上运行。

  • 大测试是通过完成UI工作流来运行的集成和UI测试。它们确保关键的终端用户任务在Android模拟器或真实设备上正常工作。

注:这里测试金字塔的定义是Google针对Android应用的测试划分。不同类型的应用,通过测试金字塔模型进行划层级的划分,以及每层的定义会有所不同。

尽管小测试的速度很快,而且重点突出,可以让您快速处理失败,但它们是低保真和独立的,让你很难相信通过测试的应用是可以正常运行的,所以需要通过大测试进行补足。

由于每个测试类别的不同特性,你的测试工作应该包含测试金字塔的每一层测试。尽管每个类别的测试比例可能因应用程序的使用情况而有所不同,但我们通常建议以下分类:70%的小测试、20%的中等测试和10%的大测试。

小测试

在添加和更改应用程序的功能时,通过创建和编写单元测试来确保这些功能按照预期的来运行。虽然可以在Android模拟器或真实设备中运行单元测试,但是在开发环境中运行单元测试通常会更快、更容易,根据需要添加Stub或mock方法实现与Android系统进行交互。

Robolectric

如果你的应用程序的测试环境要求单元测试与Android框架进行更广泛的交互,那么你可以使用Robolectric。此工具执行测试友好、基于Java 逻辑Stub来模拟Android框架,由社区来维护这些Stub。

Robolectric测试几乎完全符合Android设备上运行测试的完全保真度,但仍比设备测试运行得更快。它还支持Android平台的以下几个方面:

  • Android 4.1(API等级16)及更高版本
  • Android Gradle插件2.4及更高版本
  • 组件生命周期
  • 事件循环
  • 所有资源

Robolectric有自己的一套测试API,并引入了一些新概念。有关将Robolectric的API与应用程序的测试相结合的更多信息,请参见该工具的 用户指南

Mock对象

你可以通过修改Android.jar版本来运行单元测试,从而来监控应用与之交互的Android框架元素。这个JAR文件不包含任何代码,所以你的应用程序调用Android框架默认会抛出异常。 要测试与Android系统交互的代码元素,请使用像Mockito这样的框架来配置模拟对象。

检测单元测试

你也可以在Andorid模拟器或真实设备上运行检测单元测试,而不涉及任何stub或mock框架。因为这种测试形式的执行时间明显比本地单元测试慢,所以最好仅在需要评估应用程序对当前设备硬件的行为时才依赖此方法。

中测试

在开发环境中测试了应用程序的每个单元之后,应验证在模拟器或设备上运行时组件的行为是否正确。 中等测试允许您完成这部分的开发过程。 如果某些应用程序的组件依赖于物理硬件,则这些测试对于创建和运行尤其重要。

中等测试你的应用程序如何协调多个单元,但它们不测试完整的应用程序。中等测试的用例包括服务测试、集成测试以及mock外部依赖性行为的UI测试。

通常情况下,最好在Android模拟器或Firebase测试实验室等基于云服务上测试应用程序,而不是在真实设备上测试应用程序,因为你可以更轻松,快速地测试多种屏幕大小和硬件配置组合。

大测试

尽管测试应用程序中的每一层的功能是非常重要的,但是测试涉及整个堆栈的常见工作流和用例(从UI到业务逻辑到数据层)同样重要。

如果您的应用程序足够小,则可能只需要一套大型测试来评估你的应用程序。 否则,你应该根据团队所有权,垂直功能或用户目标来划分你的大型测试套件。

对于你所编写的每一个大型的基于工作流程的测试,你还应该编写中测试来检查工作流中包含的每个UI组件的功能。通过这种方式,即使在最初的几个步骤中,相应的大型测试也会失败了,你的测试套件仍然可以在关键用户操作的每一步中继续识别潜在的问题。

AndroidJUnitRunner类定义了一个基于JUnit框架的测试运行器,它允许你在Android设备上运行JUnit 3或JUnit 4样式的测试类。便于将测试包和应用程序加载到真实设备或Android模拟器上,运行测试并报告结果。

AndroidJUnitRunner类支持来自Android测试支持库的以下工具和框架:

JUnit4 Rules

测试说明语言包括用于管理的关键应用程序组件的生命周期涉及你的测试代码,如Activitie 和Service。学习如何定义这些规则,看到 JUnit4规则指南

Espresso

Espresso同步异步任务,同时自动执行以下应用内交互:

在View对象上执行操作。

  • 完成跨越应用程序进程边界的工作流程。仅在Android 8.0(API级别26)及更高版本上可用。
  • 评估具有辅助功能需求的用户如何使用你的应用。
  • 查找并激活RecyclerView和AdapterView对象中的项目。
  • 验证传出意图的状态。
  • 在WebView对象中验证DOM的结构。
  • 跟踪你的应用程序中长时间运行的后台操作。

要详细了解这些互动以及如何在应用程序的测试中使用它们,请参阅 Espresso指南

UI Automator

我们建议仅当你的应用程序必须与系统进行交互的操作时,才使用UI Automator来测试你的应用程序。 由于UI Automator与系统应用程序UI交互,因此你需要在每次系统更新后重新运行并修复UI Automator测试。 此类更新包括Android平台版本升级和Google Play服务的新版本。
作为使用UI Automator的替代方案,我们建议添加封闭测试或将大型测试分为一系列小型和中型测试。特别是,一次侧重于测试一个应用程序间通信,例如将信息发送到其他应用程序,并对意图结果进行响应。Espresso-Intents工具可以帮助您编写这些较小的测试。

UI Automator框架在你的应用程序的系统应用程序内执行交互,例如检查当前显示UI的层次结构、截取屏幕截图以及分析设备的当前状态。有关UI Automator如何检查正在测试的应用程序的更多详细信息,请参阅 UI Automator指南

Android Test Orchestrator

Android Test Orchestrator在其自己的Instrumentation沙箱中运行每个UI测试,通过减少测试之间的共享状态并在每个测试的基础上隔离应用程序崩溃来提高测试套件的可靠性。

Android测试(二):Android测试基础的更多相关文章

  1. AngularJS测试二 jasmine测试路由 控制器 过滤器 事件 服务

    测试应用 1.测试路由 我们需要检测路由是否在运作,是否找到了,或者是404了.我们要确认路由事件触发了,预期的模板是否真的加载了.既然路由会改变页面的地址(URL)和页面内容,我们需要检测路由是否被 ...

  2. 【转】学习使用Jmeter做压力测试(二)--压力测试的实施

    JMeter测试步骤: 1.建立测试计划 2.添加线程组 3.添加HTTP请求 4.增加监听器 5.执行测试计划 6.根据JMeter提供的报告分析结果 一.目标 测试访问目标服务器网站首页的每秒查询 ...

  3. Android入门(二):Android工程目录结构

    首先我们来看看Android工程的目录结构,如下图: 下面我们来看看每个文件夹都是用来做什么的? 1.src:这个不用多说,它就是保存Java源文件的目录: 2.gen:该文件夹用来保存自动生成的R. ...

  4. Android APP压力测试(二)之Monkey信息自动收集脚本

      Android APP压力测试(二) 之Monkey信息自动收集脚本 前言: 上一篇Monkey介绍基本搬抄官方介绍,主要是为了自己查阅方便.本文重点介绍我在进行Monkey时如何自动收集相关信息 ...

  5. 3. 移动安全渗透测试-(Android基础漏洞)

    3.1 数据存储漏洞 用户经常会把敏感数据交给app,比如:用户名and密码认证令牌联系人记录通信记录历史使用记录..... 只要愿意,app可以收集这些用户的隐私和个人信息明文存储或明文传输,通常保 ...

  6. Android Testing学习01 介绍 测试测什么 测试的类型

    Android Testing学习01 介绍 测试测什么 测试的类型 Android 测试 测什么 1.Activity的生命周期事件 应该测试Activity的生命周期事件处理. 如果你的Activ ...

  7. 《大话移动APP测试:Android与iOS应用测试指南》

    <大话移动app测试:android与ios应用测试指南> 基本信息 作者: 陈晔 出版社:清华大学出版社 ISBN:9787302368793 上架时间:2014-7-7 出版日期:20 ...

  8. Android开发2——创建测试项目

    一.创建普通Android项目   二.在AndroidManifest.xml添加两个配置 <?xml version="1.0" encoding="utf-8 ...

  9. Android蓝牙连接自动测试工具

    蓝牙连接自动测试工具 1.需求产生 开发不按着需求走都是耍流氓且浪费时间.此工具的需求产生是研发人员在开发产品时涉及到蓝牙驱动和安卓蓝牙两个东西.但是呢,蓝牙不太稳定,那么工作来了.就需要研发人员一边 ...

  10. I&period;MX6 Android CAN 命令行测试

    /********************************************************************* * I.MX6 Android CAN 命令行测试 * 说 ...

随机推荐

  1. Android Studio插件美化Android Studio&comma;文艺清新范

    一:重新定义你工作区的颜色 1:原生的工作区文字的颜色反人类,来这个网站下载自己喜欢的主题:http://www.riaway.com/  轻松定义:下载后是个jar包. 2:导入jar包 file ...

  2. 测算Redis处理实际生产请求的QPS&sol;TPS

    测算Redis处理实际生产请求的QPS/TPS Benchmark工具 redis发布版本中自带了redis-benchmark性能测试工具; 示例: 使用50个并发连接,发出100000个请求,每个 ...

  3. java打包压缩文件

    package com.it.simple.util; import java.io.BufferedOutputStream;import java.io.ByteArrayOutputStream ...

  4. Python Tool Visual Studio简单使用

    由于一直在做.NET的开发,一直用的IDE是VS系列的,所以想用VS也能开发Python,刚好微软提供一个插件PTVS(Python Tool Visual Studio)专门应用于Python开发的 ...

  5. spring4笔记----使用装配注入合作者Bean的三种方式

    no :不自动装配 byName :id(name)与setter方法去set前缀,并小写首字母后同名的Bean完成注入,如有多个匹配则抛异常 byType :spring容器找全部bean,如果找到 ...

  6. Hbase记录-Hbase配置项

    hbase.tmp.dir:本地文件系统的临时目录,默认是java.io.tmpdir/hbase−java.io.tmpdir/hbase−{user.name}: hbase.rootdir:hb ...

  7. Confluence 6 为空白空间重置原始默认内容

    希望重置为原始的默认内容: 在屏幕的右上角单击 控制台按钮 ,然后选择 General Configuration 链接. 在左侧的面板中选择 全局模板和蓝图(Global Templates and ...

  8. &lbrack;转&rsqb;C&plus;&plus;11的enum class &amp&semi; enum struct和enum

    1. 旧版enum存在的问题 问题 描述 1 向整形的隐式转换(Implicit conversion to an integer) 2 无法指定底层所使用的数据类型(Inability to spe ...

  9. &lbrack;Android&rsqb; 基于 Linux 命令行构建 Android 应用(五):Ant 构建命令

    Android SDK 提供的 android 工具可以在项目根目录自动生成 Ant 构建文件 build.xml[1].进入项目根目录后,你可以使用以下 Ant 命令[2]. ant clean 清 ...

  10. OpenEXR的读取机制

    这还是一篇学习笔记,知识重点还是领会完再敲一遍比较好. OpenEXR通过RgbaInputFile这个接口读取RGBA ONLY图像文件信息,该接口通过dataWindow()方法获取图像边界坐标信 ...