Robotium教程:第一个Android框架

什么是机器人组织?

Robotium是一个Android测试框架,用于自动化本机和混合应用程序的测试用例。此外,开发人员还可以编写功能、系统和验收测试场景,传播许多Android活动。

在本教程中,将了解-

  • Robotium测试框架
  • 如何使用Robotium
  • 步骤1) 设计测试规范
  • 步骤2) 编写测试程序
  • 步骤3) 运行测试
  • 步骤4) 获取测试结果

Robotium测试框架

标准的Android测试框架有一些限制,如下所示

  • 无法处理多个Activity
  • 测试执行性能较慢
  • 测试用例很复杂,很难实现

Robotium框架是对Android应用进行测试的较好选择

Robotium是开源框架,被认为是Android测试框架的扩展。此外,开发人员可以编写跨越多个Android活动的功能、系统和验收测试场景。

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

Robotium的优势特性

Robotium测试用例类

Robotium使用一组类(com.jayway.android.bot tium.solo)进行测试。SOLO与ActivityInstrumentationTestCase2集成。

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

集成Robotium和ActivityInstrumentationTestCase2

通过使用Robotium测试用例类,测试人员可以在不了解应用程序设计(黑盒测试)的情况下编写测试用例。与Android测试用例类相比,这是一个突出的特性。

如何使用Robotium

要在Android测试项目中使用Robotium,需要遵循以下步骤

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

使用Robotium对Android应用进行测试。为了保证Android应用程序的质量,应该遵循以下步骤

  1. 设计测试规范
  2. 开发测试程序
  3. 在目标设备上执行测试用例
  4. 收集测试结果
Your First Test with Android Testing Framework
Your First Test with Android Testing Framework

Android应用测试流程

步骤1)设计测试规范

  • 这是测试应用程序的第一步。在这一步中,将定义要测试的目标。在Android应用程序中,在应用程序中明确定义目标将有助于实现广泛的测试复盖面。
  • 计划应该进行的测试类型(单元测试、功能测试、系统测试)。
  • 设计测试用例以实现最大的覆盖率,但最小化测试用例的数量。测试的代码越多,及早发现错误的机会就越大。

步骤2)编写测试程序

本节将指导如何使用Android Junit Test和Robotium编写Android测试程序。假设已经开发了一个Android程序,该程序具有下面介绍的一些功能:

  • 显示文本“Hello world!”在屏幕上。
  • 当用户按下“开始”按钮时显示消息HelloAndroid
Your First Test with Android Testing Framework
Your First Test with Android Testing Framework

好Android应用程序

系统要求

  • Android平台自带预集成的JUnit 3.0框架。
  • 要从Eclipse创建Android测试项目,计算机必须安装:
  • 最新版本Android平台(目前为Android 8.1)

可以下载带有内置ADT(Android开发人员工具)的Eclipse IDE。它包括必要的Android SDK组件和Eclipse IDE的一个版本。

对于Robotium测试框架,需要从Robotium网页下载Robotium库。

创建Android测试项目

  • 单击文件->新建->其他
  • 如下图所示选择:Android->Android测试项目->选择下一步
Your First Test with Android Testing Framework
Your First Test with Android Testing Framework

创建新的Android测试项目

写下测试项目的名称。按照命名约定,测试项目应该命名为“HelloAndroidTest”

Your First Test with Android Testing Framework
Your First Test with Android Testing Framework

根据命名约定添加测试项目名称

选择要测试的目标应用程序。在本例中,这是HelloAndroid单击Finish

Your First Test with Android Testing Framework
Your First Test with Android Testing Framework

选择测试中的目标应用程序

创建测试套件

根据测试规范,开始为测试程序创建测试套件。(可以在项目文件夹中创建lib文件夹)。

测试用例定义了运行多个测试的装置。要定义测试用例,必须遵循下面的程序结构:

  • 实现一个子类 测试用例
  • 定义存储装置状态的实例变量
  • 通过重写来初始化装置状态 setUp()
  • 通过重写在测试后进行清理 tearDown() 。
Your First Test with Android Testing Framework
Your First Test with Android Testing Framework

测试程序的结构

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);
    }
 
}

添加测试用例

  • 在与TestSuite相同的包中,我们创建TestCase类
  • 要测试某些活动,即HelloAndroid,创建一个测试用例扩展ActivityInstrumentationTestCase2
  • 在这个类中,测试人员可以通过 getActivity() 方法获取测试活动。
  • 可以通过创建名为“test+原始方法名”的方法为测试活动自由创建测试
  • 在测试方法中,测试人员可以使用Android JUnit函数将实际值与期望值进行比较。这些方法如下所示。
Your First Test with Android Testing Framework
Your First Test with Android Testing Framework

Robotium和Android测试框架的示例方法

上面的这些测试套件验证了Application GUI必须显示文本“Hello World!”,并包含名为“Start”的按钮。

步骤3) 运行测试

编写完测试程序后,使用以下步骤运行测试

  • 将Android设备连接到PC(如果没有真机,启动Emulator)。
  • 在IDE中,右键单击Run As -> Android Unit Test
Your First Test with Android Testing Framework
Your First Test with Android Testing Framework

运行测试程序

除了在IDE上运行测试之外,还可以在命令行上运行测试。在这个Linux终端中,可以使用以下命令来运行此软件包中的所有测试:

$ADB shell am Instrument-w-e Package com.example.helloandroid.test 

步骤4) 获取测试结果

测试执行后,将获得测试结果。

在该测试程序中,执行了4种测试方法。在这种情况下,所有测试用例都通过了。

Your First Test with Android Testing Framework
Your First Test with Android Testing Framework

在所有测试用例均通过的情况下输出测试结果

如果测试用例失败,输出将显示并向显示哪些测试用例失败

Your First Test with Android Testing Framework
Your First Test with Android Testing Framework

在所有测试用例都失败的情况下输出测试结果

源代码示例

本文包括一些源代码示例,它们可以帮助更清楚地理解教程并快速掌握技术知识

  • 好Android:正在测试的应用程序。
  • HelloAndroidTest:使用Android测试框架的测试程序

IT赶路人

专注IT知识分享