在 Trade Federation 中編寫主機驅動測試

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