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內(nèi)部進行測試,eg:
Espresso;||Cross-app Components|集成測試,UI測試,可以跨多個app進行測試,eg:
UI Automator;|
公共API
@Before: 測試用例初始化操作,在測試類內(nèi)部的每個測試方法運行之前都會運行一次該初始化方法,可以定義多個以@Before注釋的方法;@After: 測試用例收尾,包括釋放資源和內(nèi)存等。在測試類內(nèi)部的每個測試方法運行之后都會運行一次該初始化方法,可以定義多個以@After注釋的方法;@Test: 一條測試用例;@Rule: 為了靈活并且重復定義每個測試方法的表現(xiàn)形式,Android測試中主要有ActivityTestRule 和 ServiceTestRule;@BeforeClass: 測試的初始化方法,和@Before的區(qū)別在于:@BeforeClass注釋的方法在整個測試類中只運行一次,主要用于一些比較耗時或者耗費資源的操作;@AfterClass: 測試的初始化方法,和@After的區(qū)別在于:@AfterClass注釋的方法在整個測試類中只運行一次,主要用來釋放資源;@Test(timeout=expectedTime): 超時測試,用例耗時超過一個確定的時間則判斷該測試用例失敗,eg: @Test(timeout=5000);@Test(expected ...): 異常測試,期望測試方法拋出異常;@Ignore: 跳過某個測試方法不執(zhí)行;
Android Testing Support Library
Android Testing Support Library提供了一組APIs,利用這些APIs可以快速的建立和運行測試用例,包括JUnit測試和UI測試,包括以下幾類API:
Espresso: UI測試框架,只能在一個app內(nèi)部,不能跨app測試;UI Automator: UI測試框架,可以跨多個app進行測試;AndroidJUnitRunner: 針對android的junit4 測試框架;