Android自动化测试之——总述
JUnit 和 Instrumented JUnit
Android测试是基于JUnit,可以分为两大类:
- 依赖本地JVM的JUnit测试, 测试用例在
module-name/src/test/java/
目录下, 不能访问Android框架功能; - 依赖Android手机的设备化测试, 测试用例在
module-name/src/androidTest/java/
目录下; 必须要运行在Android真机或虚拟机;
两者的对比如下:
|test types|description|
| :---------------------- | :--- | :--- |
| Local unit test | 测试用例只在本地JVM上运行, 当测试用例中没有Android框架或者可以mock Android框架时,这类测试用例可以最大化的减少运行时间 |
| Instrumented unit test | 测试用例必须要运行在Android设备或者虚拟机上, 可以获取设备信息等一系列信息, eg: Contex; |
| Components within your app only|集成测试,UI测试,只能在一个app内部进行测试,eg:
Espresso
;||Cross-app Components|集成测试,UI测试,可以跨多个app进行测试,eg:
UI Automator
;|
公共API
@Before
: 测试用例初始化操作,在测试类内部的每个测试方法运行之前都会运行一次该初始化方法,可以定义多个以@Before注释的方法;@After
: 测试用例收尾,包括释放资源和内存等。在测试类内部的每个测试方法运行之后都会运行一次该初始化方法,可以定义多个以@After注释的方法;@Test
: 一条测试用例;@Rule
: 为了灵活并且重复定义每个测试方法的表现形式,Android测试中主要有ActivityTestRule 和 ServiceTestRule;@BeforeClass
: 测试的初始化方法,和@Before的区别在于:@BeforeClass注释的方法在整个测试类中只运行一次,主要用于一些比较耗时或者耗费资源的操作;@AfterClass
: 测试的初始化方法,和@After的区别在于:@AfterClass注释的方法在整个测试类中只运行一次,主要用来释放资源;@Test(timeout=expectedTime)
: 超时测试,用例耗时超过一个确定的时间则判断该测试用例失败,eg: @Test(timeout=5000);@Test(expected ...)
: 异常测试,期望测试方法抛出异常;@Ignore
: 跳过某个测试方法不执行;
Android Testing Support Library
Android Testing Support Library提供了一组APIs,利用这些APIs可以快速的建立和运行测试用例,包括JUnit测试和UI测试,包括以下几类API:
Espresso
: UI测试框架,只能在一个app内部,不能跨app测试;UI Automator
: UI测试框架,可以跨多个app进行测试;AndroidJUnitRunner
: 针对android的junit4 测试框架;