Robotium 教程: Android 测试框架示例

⚡ 智能摘要

Robotium 是开源的 Android 测试自动化框架,通过用户界面驱动原生和混合应用程序,允许测试人员编写涵盖多个方面的功能、系统和验收场景脚本。 Android 活动。

  • 🔘 核心课程: Solo 公开了每个用户都可使用的点击、搜索、拖拽和断言方法。 Robotium 测试用例调用。
  • ☑️ 黑匣子友好型: 测试在运行时绑定到 UI 组件,因此对应用程序源代码的了解要求极低。
  • 四步流程: 设计测试规范,编写测试程序,在设备上执行测试程序,然后收集结果。
  • 🧪 示例: 完整的问候Android测试类检查可见文本、当前活动和开始按钮。
  • 🛠️ 两种运行模式: 从 IDE 或终端使用 adb shell am instrument 命令启动测试。
  • ⚙️ 当前状态: Robotium 5.6.3 仍然是最后一个版本,所以是新的。 Android 项目通常会将其与……配对或替换。 Espresso.

Robotium 教程

什么是 Robotium?

Robotium 是一个 Android 测试框架,可自动执行原生和混合应用程序的测试用例。 Robotium开发人员可以创建强大的自动化 GUI 测试用例。 Android 应用程序。开发人员还可以编写跨越多个应用程序的功能测试、系统测试和验收测试场景。 Android 活动。

Robotium 测试框架

标准 Android 测试框架存在以下局限性。

  • 无法处理多项活动
  • 测试执行性能缓慢
  • 测试用例复杂且难以实现。

此 Robotium 框架是进行测试的更佳选择。 Android 应用程序。

Robotium 是一个开源框架,被认为是 的扩展 Android 测试框架。使用 Robotium开发人员可以创建强大的自动化 GUI 测试用例。 Android 此外,开发人员可以编写跨越多个应用程序的功能测试、系统测试和验收测试场景。 Android 活动。

下表总结了区分不同功能的高级特性。 Robotium 从简单的仪器框架出发。

的高级功能 Robotium 与标准相比 Android 仪表框架

的高级功能 Robotium

Robotium 测试用例类

Robotium 它提供了一小集用于测试的类,文章中的示例导入了旧版本。 com.jayway.android.robotium.solo 软件包。这些类支持跨越多个活动的测试用例,并且 Solo 与...整合 ActivityInstrumentationTestCase2.

注意: 当前 Robotium 发布版本在较短的版本下公开了相同的类。 com.robotium.solo 软件包,而 Maven 坐标保持不变 com.jayway.android.robotium:robotium-solo调整导入语句,使其与您实际添加到项目中的 JAR 版本相匹配。

下图显示了 Solo 类如何位于仪器测试用例之上。

Solo 类与 ActivityInstrumentationTestCase2 集成在一个 Robotium 测试用例

整合 Robotium 和 ActivityInstrumentationTestCase2

测试人员无需了解应用程序设计即可编写测试用例,这使得该方法成为一种…… 黑盒测试与普通的……相比,这是一个显著的优势。 Android 测试用例类。

使用方法 Robotium

使用 Robotium 在您的 Android 测试项目时,您需要按照以下步骤操作。

添加和使用所需步骤 Robotium 里面 Android 测试项目

使用方法 Robotium

为了保证您的产品质量 Android 申请时,请按照以下四个步骤进行操作。

  • 设计测试规范
  • 开发测试程序
  • 在目标设备上执行测试用例
  • 收集测试结果

下面的流程图按顺序展示了这四个阶段。

四阶段流程图 Android 应用程序测试流程

Android 应用程序测试流程

步骤 1)设计测试规范

这是测试应用程序的第一步。在这一步中,您需要定义要测试的目标。 Android 应用程序包含许多需要测试的目标,例如用户界面、活动、组件和服务。明确定义测试目标有助于实现广泛的测试覆盖。

  • 计划要进行的测试类型(单元测试、功能测试、系统测试)。
  • 设计每个 测试用例 为了最大程度地覆盖,同时保持ping 测试用例数量太少。测试的代码越多,及早发现缺陷的几率就越高。

步骤 2)编写测试程序

本节将指导您如何编写…… Android 测试程序使用 Android JUnit 测试和 Robotium假设您已经开发了一个 Android 名为 Hello 的程序Android该程序具有以下所述的功能。

  • 在屏幕上显示文字“Hello world!”。
  • 显示“你好”Android 当用户按下“开始”按钮时显示的消息。

下面的屏幕截图显示了被测应用程序在设备上运行的情况。

您好Android 被测应用程序显示“Hello world”文本和“开始”按钮

您好Android 应用

系统要求

  • 此 Android 平台自带预集成功能 JUnit 3 框架,也就是 ActivityInstrumentationTestCase2 建立在.
  • 创建一个 Android 来自测试项目的 Eclipse你的机器需要正常工作 Android SDK安装。
  • 安装当前 Android 平台 SDK,而不是固定的旧版本。

本教程中的屏幕截图使用 Eclipse 使用 ADT 插件,这是编写示例时的标准工具链。 Eclipse ADT 已不再受支持,因此在现代计算机上,您应该 download Android Studio 相反,可以在内部重用相同的测试代码。 Gradle 模块。

如报名参加 Robotium 测试框架,下载 Robotium 来自图书馆 Robotium 项目页.

创建 Android 测试项目

  • 单击文件 -> 新建 -> 其他
  • 选择 Android -> Android 如图所示测试项目,然后选择“下一步”。

Eclipse 新建项目向导 Android 测试项目已选定

创建一个新的 Android 测试项目

请写下您的测试项目的名称。按照命名规则,测试项目应命名为“Hello”。Android测试”。

Eclipse 与名为 Hello 的测试项目进行对话Android按照命名规则进行测试

根据命名规则添加测试项目名称

选择待测目标应用程序。在本例中,它是 Hello。Android,然后单击完成。

Eclipse 向导步骤选择“你好”Android 作为被测目标应用程序

选择待测目标应用程序

创建测试套件

根据测试规范,您现在可以为测试程序创建测试套件。您可以从多种选项中进行选择。 软件测试 框架。本教程使用标准框架。 Android 测试框架 ActivityInstrumentationTestCase2. 测试用 Robotium,添加 Robotium 将库文件转换为 libs 项目文件夹内的目录。

测试用例定义了用于运行多个测试的测试环境。要定义测试用例,请遵循以下程序结构。

  • 实现 TestCase 的子类。
  • 定义用于存储夹具状态的实例变量。
  • 通过重写 setUp() 函数来初始化 fixture 状态。
  • 测试结束后,通过重写 tearDown() 函数进行清理。

下图将该结构映射到您即将编写的测试程序上。

一个结构 Robotium 测试程序展示了设置、测试方法和拆卸过程。

测试程序结构

package com.example.helloandroid.test;

import com.example.helloandroid.HelloAndroid;
import com.jayway.android.robotium.solo.Solo;
import android.test.ActivityInstrumentationTestCase2;
import android.widget.TextView;

public class HelloAndroidTest extends ActivityInstrumentationTestCase2 <HelloAndroid> {
    
	private HelloAndroid mActivity;
	private TextView mView;
	private String resourceString;
	private Solo solo;
	
	public HelloAndroidTest () {
		// TODO Auto-generated constructor stub
		super("com.example.helloandroid",HelloAndroid.class);	
	}
	
	 @Override
	protected void setUp() throws Exception {
		// TODO Auto-generated method stub
	//	super.setUp();
		 
	 	mActivity = this.getActivity();
		solo = new Solo(getInstrumentation(),getActivity());
		mView = (TextView) mActivity.findViewById(com.example.helloandroid.R.id.textview2);
		resourceString = mActivity.getString(com.example.helloandroid.R.string.hello_world);
		
	}
	 
	 @Override
	protected void tearDown() throws Exception {
		// TODO Auto-generated method stub
		//super.tearDown();
		solo.finishOpenedActivities();
	}
	
	public void testPrecondition() {
		assertNotNull(mView);
	}
	
	/* test Target application contains a text display "Hello World!"*/
	public void testSearchText() {
		assertEquals(resourceString,(String) mView.getText());
	}
	
	/* test HelloAndroid Activity on target application is exist*/
	public void testCurrentActivity() throws Exception  {
    	solo.assertCurrentActivity("wrong activity", HelloAndroid.class);
    }
    
	/* test Application UI contains "Start" button */
	/* send event click button to target application */
    public void testSearchButton() throws Exception {
    	boolean found = solo.searchButton("Start");
    	solo.clickOnButton("Start");
    	assertTrue(found);
    }

	

}

添加测试用例

  • 在与测试套件相同的包中,创建 TestCase 类。
  • 要测试某个活动,例如“你好”。Android创建一个继承自 ActivityInstrumentationTestCase2 的测试用例Android>.
  • 在该类中,测试人员通过 getActivity() 方法获取被测活动。
  • 您可以自由地为该活动创建测试,只需添加一个名为“test + 原始方法名称”的方法即可。
  • 在测试方法内部,测试人员可以使用 Android JUnit 用于比较实际值和预期值的函数。这些方法如下所示。

下表列出了这两个框架中最常用的断言和交互方法。

示例方法 Robotium 单人课程和 Android 测试框架

示例方法 Robotium 和 Android 测试框架

上述测试套件验证应用程序 GUI 显示文本“Hello World!”并包含一个名为“开始”的按钮。

步骤 3) 运行测试

编写完测试程序后,请按照以下步骤运行测试。

  • 连接一个 Android 将设备连接到您的电脑,或者如果没有真机可用,则启动模拟器。
  • 在 IDE 中,右键单击测试项目,然后选择“运行方式”→ Android 单元测试。

下面的屏幕截图显示了从 IDE 启动的测试运行。

启动 Robotium 测试程序作为 Android 来自 IDE 的单元测试

运行测试程序

除了从 IDE 运行测试之外,您还可以从命令行运行它。在本测试程序中,测试包是 com.example.helloandroid.test在 Linux 终端中,使用以下命令运行该软件包中的每个测试。

$ adb shell am instrument -w -e package com.example.helloandroid.test

步骤 4)获取测试结果

测试执行完毕后,收集测试结果。

此测试程序执行了四个测试方法。在下面的运行结果中,所有测试用例均通过。

测试结果输出显示所有四个 Robotium 测试用例通过

所有测试用例通过时的测试结果输出

如果测试用例失败,则会显示输出结果,并向您展示哪些测试用例失败了。

测试结果输出列表 Robotium 失败的测试用例

测试用例失败时的测试结果输出

来源 Code 例子

本文包含源代码示例,可帮助您更清晰地理解教程并快速掌握技术细节。

如果你想比较 Robotium 有关此领域的其他选项,请参见 移动应用测试 指导, Appium 教程 以及综述 移动应用测试工具.

常见问题

Robotium 5.6.3 仍然是最后一个发布的版本,积极的开发工作已于数年前停止。该框架仍然可以运行,其制品也仍然在 Maven Central 上,但新的版本已经发布。 Android 项目通常会选择 Espresso,这 Google 保持。

Robotium 是一个黑盒框架,在运行时绑定到小部件,几乎不需要了解源代码。 Espresso is Google这是一个白盒工具,它与 UI 线程同步,并需要访问应用程序代码。

Robotium 它一次只能驱动一个应用程序,无法可靠地处理 WebView 之外的 Flash 或 Web 内容,开源 JAR 中没有内置录制功能,而且它依赖于已弃用的检测类,这使得现代技术变得复杂。 Gradle 建立。

声明 androidTestImplementation 'com.jayway.android.robotium:robotium-solo:5.6.3' 在模块构建文件中,或者删除 robotium-solo JARlibs 并将其作为文件依赖项引用。

是的。 Robotium 这些测试是常规的仪器测试,因此同一个 APK 会在模拟器或真机上运行。手势、传感器和性能检查最好使用真机,因为模拟器的运行时间可能有所不同。

Robotium 它适用于用户界面层面的功能性、系统性和用户验收测试场景。它不能替代单元测试(单元测试在 JVM 上运行速度更快),也不能替代更广泛的测试。 软件测试类型 还需要发布。

机器学习用于实现能够应对布局变更的自愈定位器、标记渲染退化的视觉比较以及对重复运行进行排序的不稳定测试检测。该工具减少了维护工作,但最终仍由人来决定哪些行为才是关键。

GitHub 副驾驶 可以从活动类中搭建 Solo 设置、拆卸和断言方法。 Rev请仔细查看建议,因为它可能会发出应用程序永远不会满足的旧版包导入或断言。

总结一下这篇文章: