本頁介紹如何撰寫由主機驅動的 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>