本頁介紹如何編寫由主機驅動的 JUnit4 風格的設備測試。這意味著線束的主機端將觸發針對設備的操作。
請注意,我們認為“主機端”測試和“主機驅動”測試略有不同:
- 主機驅動測試:是在主機上運行的與一個或多個設備交互的測試。被測系統 (SUT) 不在主機本身上,而是在主機上進行測試。
- 主機端測試:是純粹在主機上運行並僅在主機上測試某些內容的測試,例如單元測試。
為什麼要創建主機驅動測試而不是儀器測試?
某些測試可能需要您影響設備的整體狀態,例如發出重啟命令。在儀器測試用例中,重新啟動會終止儀器,測試無法繼續,並且沒有可用的結果。
主機驅動的測試還可以驅動額外的設置步驟,這些步驟需要與測試所依賴的外部設備進行交互。
主機驅動的測試可以處理這些用例,並允許使用更多場景對設備進行高級測試。如果您處於這種情況,那麼編寫主機驅動的測試是最有意義的。
主機驅動的測試是如何用 TF 編寫的?
這是一個示例:
@RunWith(DeviceJUnit4ClassRunner.class)
public class SampleHostJUnit4DeviceTest extends BaseHostJUnit4Test {
@Before
public void setUp() throws Exception {
// Some setup
}
@Test
public void testCheckWeHaveDevice() throws Exception {
Assert.assertNotNull(getDevice());
}
}
Trade Federation 中的主機驅動測試由DeviceJUnit4ClassRunner JUnit4 測試運行程序驅動。測試類的整體結構與常規的 JUnit4 測試相同:
-
@BeforeClass
-
@Before
-
@Test
-
@After
-
@AfterClass
-
Assume
,Assert
擴展BaseHostJunit4Test是一種繼承有用的測試實用程序 API 的方法,例如:
-
installPackage
:允許在目標設備上安裝 APK。 -
installPackageAsUser
:允許以用戶身份在目標設備上安裝 APK。 -
uninstallPackage
:允許卸載 APK。 -
isPackageInstalled
:檢查是否安裝了包。 -
hasDeviceFeature
: 檢查設備是否支持某個功能。 (pm list features
) -
runDeviceTests(DeviceTestRunOptions options)
:使用DeviceTestRunOptions對目標設備運行儀器測試以處理所有可能的選項。
還提供對 Tradefed 設備對象的訪問:
-
getDevice()
:返回一個用於操作設備的 TF 設備對象。 -
getBuild()
:返回構建信息 TF 對像以獲取有關構建的信息。 -
getAbi()
:返回運行測試的 ABI。
Tradefed 支持:每類設備準備和清理
JUnit4 @BeforeClass
和@AfterClass
僅適用於靜態方法,這使得無法使用#getDevice()
處理程序來執行某些特定於設備的、一次性的、每個類的設置或清理。要解決此問題,請使用 Tradefed 註釋。
- @BeforeClassWithInfo:在@BeforeClass 註解之前運行
- @AfterClassWithInfo:在@AfterClass 註解之後運行
@BeforeClassWithInfo
public static void beforeClassWithDevice(TestInformation testInfo) {
assertNotNull(testInfo.getDevice());
testInfo.properties().put("mytest:test-prop", "test");
}
@AfterClassWithInfo
public static void afterClassWithDevice(TestInformation testInfo) {
assertNotNull(testInfo.getDevice());
testInfo.properties().put("mytest:test-prop", "test");
}
TestInformation
允許您使用可在靜態或非靜態範圍內使用的設備和存儲屬性。 BaseHostJUnit4Test
支持通過#getTestInformation()
在非靜態範圍內獲取TestInformation
。
如果您不擴展BaseHostJUnit4Test
,則可以實現ITestInformationReceiver
以接收TestInformation
對象。
如何在 Tradefed 中配置主機驅動測試?
在 Tradefed XML 配置文件中,主機驅動的測試通過HostTest運行程序運行。
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>