`
dowhathowtodo
  • 浏览: 780337 次
文章分类
社区版块
存档分类
最新评论

android基础知识12:android自动化测试06—Instrumentation 04 解析

 
阅读更多
已经在Android SDK中学习了很多关于JUnit的内容,但是感觉一直有几个问题没有解决(不知道大家是否有同样的感受)JUnit的测试都自动化的,完全是不需要任何操作的,有2个问题我一直都还没有找到答案,这2个问题如下:
JUnit可以用来测试Android的基本组成元素:Activity、Service、Provider,那么我们如何控制这些基本元素运行的,这需要Android系统提供一些底层操作的接口才可以做到。
如何模拟界面操作,比如说:单击界面上的按钮、选择菜单等。
对于第二个问题,我在Cview中似乎找到了答案,Cview中提供一些界面操作的函数,例如:performClick(),看来Android SDK还是提供了一些这方面的函数来模拟各种操作。对于第一个问题,本篇对这个问题幅详细说明下。

首先我们先想下,如果要实现对Activity的测试需要些什么?首先需要创建Activity(这个Android SDK中已经提供了),然后可以控制Activity的生命周期,这些是最基本的。在Android SDK中说明过Activity的创建是异步的,也就是说当我们调用startActivty()后,这个函数立刻返回,而不是等待Activity创建好后才返回,这就需要一些同步方面的操作。将前面的概括起来就是2个方面:控制Activity的生命周期与同步方面的问题。Android SDK为我们提供了 instrument,在android.test包中InstrumentationTestCase 类有个函数getInstrumentation()以及通过adb shell am instrument启动测试例子的方法中,都提到了instrument,下面就对instrumentation详细说明。

什么是Instrumentation?

Instrumentation是执行application instrumentation代码的基类。当应用程序运行的时候instrumentation处于开启,Instrumentation将在任何应用程序运行前初始化,可以通过它监测系统与应用程序之间的交互。Instrumentation implementation通过的AndroidManifest.xml中的<instrumentation>标签进行描述。
Instrumentation似乎有些类似与window中的“钩子(Hook)函数”,在系统与应用程序之间安装了个“”。

android.app包中Instrumentation类结构,如下图所示


其包含有2个内部类:ActivityMoniter、ActivityResult

  • ActivityMoniter:有关特定的Intent的监视。一个ActivityMoniter类的实例通过函数addMonitor(Instrumentation.ActivityMonitor)添加到当前instrumentation中,一旦添加后,每当启动一个新的Activity,ActivityMoniter就会检测,如果匹配,其hit count计数更新等其他操作。 一个ActivityMonitor也可以用来寻找一个Activity,通过waitForActivity()方法,这个函数将返直到匹配的活动被创建。
  • ActivityResult:一个活动执行的结果说明,返回到原来的活动。

然后我们看下Instrumentation类的函数,列举其主要函数如下:

  • 添加、删除ActivityMoniter;


  • Application、Activity的创建与生命周期的控制;


  • 控制Instrumentation的运行;


  • 发送按键、滚动球等事件消息到当前窗口;


  • 同步方面的操作;
  1. 创建一个Activity直到Activity开始运行;
  2. 在主线程中执行一个调用,主线程被阻滞直到调用结束 ;
  3. 当主线程空闲的时候(没有消息等待处理)执行一个调用;
  4. 同步等待主线程处于空闲期


看了这些,我们在结合前面说的2个方面:制Activity的生命周期与同步方面的问题,在Instrumentation类中都实现了,尤其是些同步操作方面的。
Instrumentation简单使用的例子

public class HelloTest extends InstrumentationTestCase
{
Hello mActivityTested;
public HelloTest() {}
//@Override
protected void setUp() throws Exception
{
super.setUp();
Intent intent = new Intent();
intent.setClassName(“com.xmobileapp.hello”, Hello.class.getName());
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mActivityTested = (Hello) getInstrumentation().startActivitySync(intent);
}
//@Override
protected void tearDown() throws Exception
{
mActivityTested.finish();
super.tearDown();
}
}
在这里我们使用InstrumentationTestCase类的getInstrumentation()函数获取Instrumentation对象,通过Instrumentation的startActivitySync()函数启动一个Activity,直到Avtivity启动后返回。

AndroidManifest.xml中的<instrumentation>标签说明

打开AndroidManifest.xml文件后,将会看到AndroidManifest.xml编辑工具,通过这个工具我们可以很方面的在AndroidManifest.xml添加元素


选择Instrumentation面板后,我们就可以编辑Instrumentation标签了,界面如何操作在这里就不说明了,主要说明属性值的意义:


总结说明
学习完了Instrumentation,心中的很多问题都没有了,还需要到Android SDK中去深入的学习这个类,才能更好的测试Activity对象。


参考资料:

android.app.instrumentation解析

分享到:
评论

相关推荐

    Android单元测试初探——Instrumentation

    学习Android有一段时间了,虽然前段时间对软件测试有了一些了解,不过接触android的单元测试却是头一次。这几天在物流大赛上也用了不少时间,所以对于android的单元测试没有太深入的研究,所以先写个基本入门吧!...

    Android UiAutomator 自动化测试

    Instrumentation是早期Google提供的Android自动化测试工具类 UiAutomator也是Android提供的自动化测试框架,基本上支持所有的Android事件操作 Espresso,Android Studio工程,以apk的形式执行测试 UiAutomator2,...

    源码

    《AndroidStudio单元测试——instrumentation》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/38060361

    android-support-multidex-instrumentation.jar.zip

    android-support-multidex-instrumentation.jar.zip

    Android自动化测试

    Android自动化测试,该jar包支持robotium测试,当然支持所有的继承Instrumentation类型的测试

    翻译:Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation

    学习valgrind必看的一篇论文-Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation,论文较长,这里是全文翻译。

    Android中Hook Instrumentation 的实现

    参考博客 【Android中Hook Instrumentation 的实现】 http://blog.csdn.net/u012341052/article/details/71191409

    Android系统自动化测试简述

     Android自动化测试目前可借鉴的经验不多,现在采取的方式就是通过java代码对Activity和View进行操作,目前已知的入口是Instrumentation类。  Instrumentation与Activity均位于android.app包下,这个包内还有诸如...

    android自动化测试框架robotium的jar包、doc文档及source code

    著名的android自动化测试框架robotium出了4.1版本 在原有基础上增加了对webview的支持 方便好用,但是需要测试者有一定java开发基础 对android instrumentation有一定了解

    Android系统的自动化测试解决方案

    现在,已经有大量的Android自动化测试架构或工具可供我们使用,其中包括:ActivityInstrumentation,MonkeyRunner,Robotium,以及Robolectric。另外LessPainful也提供服务来进行真实设备上的自动化测试。  Android...

    Android手机测试的自动化测试工具

    Android自动化测试相对来说还是比较难,Instrumentation比较难以使用。下面和大家分享一个Android自动化测试工具Robotium。Robotium是一款测试AndroidApp的测试框架,它使得编写黑盒测试代码更加容易和稳定。通过...

    android-support-multidex-instrumentation.jar

    android-support-multidex-instrumentation.jar android-support-multidex-instrumentation.jar

    安卓自动化测试框架

    通过android的instrumentation机制联系起来,可以用来对应用程序进行功能测试和简单的性能测试,测试程度也可以是从代码级别到具体功能点级别,到简单的性能测试级别。本文将从以下几个方面来对基于android平台的...

    详解Android单元测试最佳实践

    目的 ...这种方式运行速度快,对运行环境没有特殊要求,可以很方便的做自动化测试,是单元测试首选的方法 Instrumentation测试 Instrumentation测试需要运行在Android环境下,可以是模拟器或者手机等

    android 学习笔记

    电话拨号 使用系统自带意图对象完成: Intent intent=new Intent();... &lt;instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.xiaoqiang" /&gt; &lt;/manifest&gt;

    单元测试instrumentation入门---源码

    博客《单元测试instrumentation入门》对应的源码,博客地址:http://blog.csdn.net/harvic880925/article/details/37924189

    RESTMock:适用于Android Instrumentation测试的HTTP Server

    文章目录设置这是为Android设置RESTMock的基本规则步骤1:存储库将其添加到存储库末尾的root build.gradle中: allprojects {repositories {.. .maven { url " https://jitpack.io " }}}步骤2:依存关系添加依赖项...

    如何对Android系统手机进行单元测试

    中加入:外面加入:MISSIONandroid:name="android.permission.RUN_INSTRUMENTATION"/&gt;android:label="Testformyapp"/编写单元测试代码:必须继承自AndroidTe如何对Android系统手机进行单元测试 如何进行Android单元...

    instrumentation

    Instrumentation可以把测试包和目标测试应用加载到同一个进程中运行。既然各个控件和测试代码都运行在同一个进程中了,测试代码当然就可以调用这些控件的方法了,同时修改和验证这些控件的一些数据

Global site tag (gtag.js) - Google Analytics