android自动化框架简要剖析(一):运行原理+基本框架

android自动化测试原理:

1、将测试apk和被测试apk,运行在一个进程中;通过instrumentation进行线程间的通信

2、通过android.test.AndroidTestCase及其子类,控制android系统对象

3、通过android.test.InstrumentationTestCase 及其子类,测试Activity

被测试程序的manifest文件中要指定被测试程序,如下:

<instrumentation

         android:name="android.test.InstrumentationTestRunner" 

         android:targetPackage="cn.mama.activity" />

4、当你运行一个测试程序时,首先会运行一个系统工具叫做Activity Manager。

Activity  Manager使用Instrumentation框架来启动和控制TestRunner,

这个TestRunner反过来又使用Intrumentation来关闭任何主程序的实例,

Activity  Manager加载并启动你的测试程序,杀死主程序的任何实例,

然后在测试程序的同一个进程里加载主程序,然后传递测试程序的第一个测试用例。

这个时 候,TestRunner会接管这些测试用例,运行里面的每个测试方法,直到所有的方法运行结束。

这就能确保测试程序与主程序间的直接交互。

1、Instrumentation测试程序和被测试程序通信核心,起测试驱动作用。目前的robotium、athran、Selendroid...都是二次封装它,作为测试api用。

就像Selenium 2 的webdriver一样,测试架构和代码风格很类似

这里只列出主类列表,具体解释看第二篇
java.lang.Objectjava.lang.Object
↳ android.app.Instrumentation

↳ android.app.Instrumentation
↳ android.test.InstrumentationTestRunner

2、junit.framework.TestCase测试框架,用来管理测试用例 和 用例集

java.lang.Object
↳ junit.framework.Assert
↳ junit.framework.TestCase
↳ android.test.InstrumentationTestCase
↳ android.test.ActivityTestCase
↳ android.test.ActivityInstrumentationTestCase2<T extends android.app.Activity>

java.lang.Object
↳ junit.framework.Assert
↳ junit.framework.TestCase
↳ android.test.AndroidTestCase
↳ android.test.PerformanceTestCase   (这是Interface)


Known Direct Subclasses:
AndroidTestCase,
InstrumentationTestCase,
TestSuiteBuilder.FailedToCreateTests

Known Indirect Subclasses
ActivityInstrumentationTestCase<T extends Activity>,
ActivityInstrumentationTestCase2<T extends Activity>,
ActivityTestCase,
ActivityUnitTestCase<T extends Activity>,
ApplicationTestCase<T extends Application>,
LoaderTestCase,
ProviderTestCase<T extends ContentProvider>,
ProviderTestCase2<T extends ContentProvider>,
ServiceTestCase<T extends Service>,
SingleLaunchActivityTestCase<T extends Activity>,
SyncBaseInstrumentation

原文地址:https://www.cnblogs.com/zhitang2009/p/3423068.html