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

android基础知识12:android自动化测试06—Instrumentation 05 InstrumentationTestRunner

 
阅读更多
在学习Android、JUnit的过程中,随着学习的深入,发现相关的内容越来越多,将这些类按照继承关系整理如下:
  • Test—TestCase—AndroidTestCase
  • Test—TestCase—InstrumentationTestCase
  • Test—TestSuite—InstrumentationTestSuite
  • TestListener—–BaseTestRunner—AndroidTestRunner
  • Instrumentation—InstrumentationTestRunner
前4条路线是Android在JUnit框架上的扩展,最后一条线是一条重要的线,用一句话来说明就是:这是Android在JUnit框架的基础上锦上添花。在android.app.instrumentation篇幅的学习中,我们对instrumentation有了一定的了解,本篇幅我们将介绍最后一个类InstrumentationTestRunner。在学习这个类前,我们先补充一些知识:在前面学习了这么多,但是在我们的测试例子中却没有看到核心类InstrumentationTestSuite (这个类相当于测试单元中的容器,所有的TestCase都需要添加带TestSuite中加以管理),这是为什么了?因为在Android SDK中对这部分有着一层很深的“包装”,正是有了这个中间层,所以我们没有看到TestSuite这个容器,下面开始介绍这个中间层。

android.test.suitebuilder

包的名称似乎就在告诉我们这个包的作用:suite产生器,其包结构如下:


从这个图上似乎没有看到我们想要的,下面我们再仔细看下TestSuiteBuilder这个类:


通过上面的关键字:Exclude(排除; 不包括在内),Include(包括, 包含),the given packages and all sub-package(给定的包和所有子包),这些都让我们感觉到TestSuiteBuilder类的主要作用是:将包添加或排除在当前的单元测试中。大家是不想起来了如何启动单元测试篇幅中介绍的启动命令:

adb shell am instrument -w com.xmobileapp.hello/android.test.InstrumentationTestRunner
这条命令的实际作用是是将com.xmobileapp.hello添加到当前单元测试中,在这里我们在列举一些这样的命令,如下:
运行某个TestCase:

adb shell am instrument -w -e class com.android.foo.FooTest com.android.foo/android.test.InstrumentationTestRunner
运行一个TestCase中的某个功能:

adb shell am instrument -w -e class com.android.foo.FooTest#testFoo com.android.foo/android.test.InstrumentationTestRunner
同时测试多个TestCase:
adb shell am instrument -w -e class com.android.foo.FooTest,com.android.foo.TooTest com.android.foo/android.test.InstrumentationTestRunner
看了这些命令,再结合TestSuiteBuilder的函数,我想大家就明白了一个重要的问题:在AndroidManifest.XML文件Instrumentation的属性(如下图所示)中为什么没有任何与TestSuite相关的说明?


单元测试的配置已经取代了TestCase的管理,所以TestSuite的功能就弱化了很多,TestSuiteBuilder就是在我们提供当前测试的测试范围的配置,例如:是否将某个TestCase添加到当前测试中。TestSuiteBuilder类的函数builder就根据的我们的配置产生TestSuite。看到这里我们的的疑惑就少了很多,下面我们继续介绍InstrumentationTestRunner类。

InstrumentationTestRunner 类结构,如下图所示:

主要函数接口列举如下:


InstrumentationTestRunner典型的使用过程:

  1. 编写测试用例,测试用例基本上是从以下类继承的;
    l ActivityInstrumentationTestCase
    ActivityUnitTestCase
    AndroidTestCase
    ApplicationTestCase
    InstrumentationTestCase
    ProviderTestCase
    ServiceTestCaseSingleLaunchActivityTestCase
  2. 在AndroidManifest.xml中定义一个instrumentation并targetPackage属性中说明被测试的包名称;
  3. 运行instrumentation使用“adb shell am instrument -w”,运行所有测试(除性能测试);
  4. 运行instrumentation使用“adb shell am instrument -w”,并添加额外的命令“-e func true’”来运行所有的功能测试。这谢测试继承至测InstrumentationTestCase;
  5. 运行instrumentation使用“adb shell am instrument -w”,并添加额外的命令“-e unit true”来运行所有的单元测试。这些测试那些非InstrumentationTestCase 从继承的类;
  6. 运行instrumentation使用“adb shell am instrument -w”,并添加额外的命令“-e class” 来运行某个单独的TestCase。

看了上面的命令,我们在看下ApiDemos\test\…\AllTests.java中的一些注释,如下:


大家就应该明白这些注释说的是什么意思了吧,这篇文章的目的也就达到了。
下面介绍一个简要的例子:

public class ApiDemosRunner extends InstrumentationTestRunner 
{
@Override
public TestSuite getAllTests()
{
Log.i(“ApiDemosRunner”, “ApiDemosRunner::getAllTests()”);
return new TestSuiteBuilder(ApiDemosRunner.class)
.includeAllPackagesUnderHere()
.build();
}
@Override
public ClassLoader getLoader()
{
return ApiDemosRunner.class.getClassLoader();
}
}

看了这段代码,大家就明白TestSuiteBuilder的主要作用了,这里我们需要说明的:万变不离其中,整个测试的核心还是TestSuite,只不过Android SDK在此基础上增加了TestSuiteBuilder,是我们对TestCase的管理更加方便。InstrumentationTestRunner类相对比较简单,看了上面的例子,以后按照这种方法使用就可以了,这里就不在详细说明。

总结说明

Android SDK在单元测试方面的封装比较完美,我们几乎不需要写太多的代码就可以完成单元测试。


参考资料:

android.test.InstrumentationTestRunner解析

分享到:
评论

相关推荐

    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

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

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

    android-support-multidex-instrumentation.jar.zip

    android-support-multidex-instrumentation.jar.zip

    Android自动化测试

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

    Android系统自动化测试简述

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

    Android中Hook Instrumentation 的实现

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

    android 学习笔记

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

    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单元测试最佳实践

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

    安卓自动化测试框架

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

    android-support-multidex-instrumentation.jar

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

    android-junit-report-dev

    instrumentation android:name="android.test.InstrumentationTestRunner" 修改为 instrumentation android:name="com.zutubi.android.junitreport.JUnitReportTestRunner" 4、 在sonar-project.properties文件最后...

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

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

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

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

    android连接SQLite数据库源代码

    <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="jll.sqlite" android:label="Tests for My App" /> package jll.sqlitedb; import android.content....

Global site tag (gtag.js) - Google Analytics