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