`
Stream.Town
  • 浏览: 23837 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android Instrumentation基础使用

阅读更多

    这两天准备研究Robotium的源码,不过由于Robotium是以Instrumentation为基础的,因此就先补习了一下Instrumentation的基础。

    Instrumentation是Android自带一个单元测试框架,不过虽然这么说,其对于大部分应用开发人员来讲,最大的作用反而是用于功能或UI测试。

 

    整个框架继承自JUnit框架,使用方法也类似,也是要继承TestCase类。不过在Instrumentation中,需要继承的是几个Google提供的TestCase的子类,其中最重要也是最常用的是ActivityInstrumentationTestCase2这个类,一般进行应用界面测试时都需继承此类(Robotium一般也是使用此类)。当然,Android也提供了几个其他选择用于测试其他组件:

 

 

    这几个类全部基于AndroidTestCase类,只不过根据各个组件的特性提供了不同的get方法,如getActivity(), getService()等等,而AndroidTestCase继承于junit的TestCase类,所以所有测试类遵循单元测试框架。

 

    要写一个APK的Instrumentation测试,首先准备一个测试目标——即待测试的APK。然后再建立一个APK作为测试APK,在Manifest中添加如下声明(其中targetPackage一项需要填写测试目标的包名):

    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.test.target" />

 

    同时,还需在Application标签中嵌入如下声明:

<uses-library android:name="android.test.runner" />

     

    声明完毕,可以开始写测试代码了,如下:

 

package com.tc.upnptest.test;

import android.app.Activity;
import android.app.Instrumentation.ActivityMonitor;
import android.app.Instrumentation.ActivityResult;
import android.content.Intent;
import android.os.SystemClock;
import android.test.ActivityInstrumentationTestCase2;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;

public class MainTest extends ActivityInstrumentationTestCase2{
        private Activity target;
        private TextView tx;

	public MainTest() throws ClassNotFoundException {
		super(Class.forName("com.test.target.MainActivity"));
	}
	
	@Override
	protected void setUp() throws Exception {
		super.setUp();
                target =  getActivity();
                tx = (TextView) a.findViewById(0x7f060000);
	}

	@Override
	protected void tearDown() throws Exception {
		super.tearDown();
	}
	
	public void testMain() {
		dosomething();
                assertTrue(true);
	}
}
   

    首先写一个类继承ActivityInstrumentationTestCase2,如上面的MainTest。需要注意的是此类的构造方法不要加任何参数,在构造方法中直接调用super(Class)即可,其中Class就是要测的Activity的Class。

 

    getActivity()会自动获取Activity对象(就是上面声明的Class对应的Activity),如果Activity没有启动则会自动启动。如果想要主动启动Activity,可以用launchActivityWithIntent,或instrumentation.startActivitySync
 

    另外,在setUp中调用setActivityInitialTouchMode可以让测试目标处于非触摸模式,以防止测试途中误操作。


    写完了测试类,即可开始运行。在eclipse中右击项目,在弹出的菜单中选择Run as → Android JUnit Test运行,即可看到如下界面:

     

    下面的是一些测试中的常用界面操控方法,方法中需要获取instrumentation对象,直接在类中调用getInstrumentation()即可,下面不再赘述。

 

  1. 可以直接获取Activity对象,通过findViewById来获取各个View控件,已完成对于各个View的操作,id值可以通过目标APK的R文件获取。
  2. 测试类仍需遵循Android的基本原则,对于View的更改必须要在UI线程中执行,因此要对View进行直接操作,需要利用runTestOnUiThread(Runnable r)函数。
  3. 需要对界面直接进行点击、滑动、按键等操作,可以用sendKeys发送一些按键,也可以直接用instrumentation类中的sendKeyDownUpSync, sendKeySync, sendPointerSync等方法发送原始的事件。

   

    当测试时有Activity跳转时,可以用ActivityMonitor捕获新的Activity,如下操作:

		ActivityMonitor am = new ActivityMonitor("com.test.target.Activity2", null, false);
		getInstrumentation().addMonitor(am);
		Activity b = getInstrumentation().waitForMonitor(am);

 

    测试时往往需要等待一个UI事件执行完毕,再进行下一个测试操作,这时可以直接调用

 

		getInstrumentation().waitForIdleSync();

 

 

  • 大小: 11.9 KB
分享到:
评论

相关推荐

    0android_test[1]

    下面我们将深入探讨Android测试的基础知识、Android Studio的测试工具以及"HelloWorld"测试案例。 1. Android测试基础: Android测试主要分为单元测试、功能测试、集成测试和系统测试。单元测试关注于单一代码模块...

    Android开发帮助文档

    14. **Android版本兼容性**:由于Android设备的碎片化,开发者需要考虑不同版本的兼容性问题,如使用Support Library或AndroidX库。 15. **热修复与插件化**:对于大型应用,热修复(如Facebook的Fastlane)和应用...

    浅析Android 模拟键盘鼠标事件

    3. **Instrumentation发送键盘鼠标事件**:Android SDK提供了一个名为`Instrumentation`的类,它允许开发者在应用运行时直接操控UI和发送事件。`Instrumentation`包含一系列以`send`开头的方法,如`...

    Android 7 编程入门经典 第4版 Beginning Android Programming with Android Studio

    《Android 7编程入门经典 第4版》是学习Android应用开发的权威指南,特别适合初学者,同时也适合作为有经验开发者巩固基础的参考书。本教程基于Android Studio,这是Google推荐的Android应用程序开发集成开发环境...

    Android上的单元测试

    其中包含的`TestCase`类主要用于定义Android单元测试的基础结构,它是一个抽象类,为所有Android特定的单元测试提供基类支持。 ##### 3.2 Android单元测试类继承体系 - **继承结构**:Android的单元测试类通常继承...

    安卓UiAutomator/UiDevice/Instrumentation官方测试范例

    `Instrumentation`是Android系统提供的另一个测试框架,它是所有Android应用测试的基础。它允许开发者在应用运行时控制和监视应用的行为。Instrumentation可以启动、停止、控制被测应用,以及注入事件到应用的生命...

    android开发教程ppt

    Android开发教程PPT是针对初学者的一套详细指南,旨在帮助读者快速掌握在Android平台上进行软件开发的基础知识。本教程涵盖了从安装开发环境到编写、调试和发布应用程序的全过程。 一、Android概述 Android是由...

    kotlin-for-android-developers 中文

    它不仅介绍了语言的基础知识,而且涵盖了使用Kotlin开发Android应用的各个方面。这使得读者能够系统性地掌握Kotlin,并在Android平台上进行高效的编程实践。 学习Kotlin对于想要保持自身技术栈与行业发展同步的...

    Android自动化测试之Robotium--基础操作

    在Robotium简介中提到,它在Instrumentation API的基础上提供了更多操作控件的函数,其控件搜索功能封装得比较好。Robotium还支持查看bug点以及集成测试结束时统计的多种覆盖率结果。 最后,对于Android自动化测试...

    Android系统总结+精通android

    Android系统是全球最广泛使用的移动操作系统之一,由Google公司开发并维护。它的开源特性使得开发者可以深入理解其工作原理,并进行个性化定制。本篇将基于“Android系统总结+精通android”这一主题,全面探讨...

    Android群英传:神兵利器

    这本书涵盖了从基础到高级的多个层面,为读者呈现了一个全面而细致的Android开发知识体系。 在Android开发中,“神兵利器”通常指的是那些高效、强大的工具和技术,包括但不限于Android Studio IDE、Java或Kotlin...

    Appium mac/android自动化

    学习Appium自动化的过程中,需要具备Android开发的基础知识、熟悉Android SDK工具和知道如何使用命令行。同时,了解Java或Python语言基础对于编写和理解测试脚本非常重要。通过这些准备工作和学习内容,开发者可以...

    JAVA_EYE_ANDROID

    11. **Android测试**:涵盖单元测试、UI测试、仪器测试(Instrumentation Testing)等,是保证应用质量的重要环节。 12. **Gradle构建系统**:Android项目通常使用Gradle进行构建,理解Gradle脚本和依赖管理是必要...

    安卓Android源码——TestAndrico.rar

    TestAndrico项目主要涉及的是Android应用层和系统服务层的交互,可能包括JUnit测试框架的扩展、Instrumentation测试以及Android测试支持库的使用。这些组件都是Android开发中的核心部分,通过分析其源码,我们可以...

    Kotlin For Android(中文翻译).pdf

    本书是一本关于如何利用Kotlin语言开发Android应用的教程。Kotlin作为一种新兴的编程语言...通过学习本书,读者不仅可以掌握Kotlin语言的使用,还能了解到Android开发中的最佳实践,提高Android应用开发的效率和质量。

    Android程序测试(1)

    2. **仪器测试(Instrumentation Tests)**:在真实设备或模拟器上运行,可以访问Android系统API并控制应用程序。这包括Activity、Service、Content Provider和Broadcast Receiver的测试。我们将在"HelloAndroidTest...

    android test

    5. **Instrumentation Tests**:在真实设备或模拟器上运行的系统级测试,可以覆盖整个应用流程。 此外,还有性能测试、压力测试、Monkey测试等,以检查应用的稳定性、响应速度和内存使用情况。 在智慧停车场的场景...

    Android入门经典例子合集

    这个"Android入门经典例子合集"正是为了帮助初学者快速理解和掌握Android应用开发的基础知识而精心整理的资源。以下是一些核心知识点,涵盖从环境搭建到功能实现的全过程: 1. **Android Studio安装与设置**:...

Global site tag (gtag.js) - Google Analytics