Menulis pengujian yang didorong host di Trade Federation

Halaman ini menjelaskan cara menulis pengujian perangkat gaya JUnit4 yang didorong oleh host. Artinya, sisi host dari harness akan memicu tindakan terhadap perangkat.

Perhatikan bahwa kami menganggap pengujian "sisi host" dan pengujian "yang didorong host" sedikit berbeda:

  • pengujian yang didorong host: Adalah pengujian yang berjalan di host yang berinteraksi dengan satu atau beberapa perangkat. Sistem yang diuji (SUT) tidak berada di host itu sendiri, tetapi diuji dari host.
  • pengujian sisi host: Adalah pengujian yang murni berjalan di host dan menguji sesuatu hanya di host, misalnya pengujian unit.

Mengapa membuat pengujian yang didorong host, bukan uji instrumentasi?

Beberapa pengujian mungkin mengharuskan Anda memengaruhi status keseluruhan perangkat, seperti mengeluarkan perintah reboot. Dalam kasus uji instrumentasi, reboot akan menghentikan instrumentasi, pengujian tidak dapat dilanjutkan, dan tidak ada hasil yang tersedia.

Pengujian yang didorong host juga dapat mendorong langkah-langkah penyiapan tambahan yang memerlukan interaksi dengan perangkat eksternal yang bergantung pada pengujian.

Pengujian yang didorong host dapat menangani kasus penggunaan ini dan memungkinkan pengujian lanjutan perangkat dengan lebih banyak skenario. Jika Anda berada dalam situasi tersebut, menulis pengujian yang didorong host adalah hal yang paling masuk akal.

Bagaimana pengujian yang didorong host ditulis di TF?

Berikut adalah contohnya:

@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());
    }
}

Pengujian yang didorong host di Trade Federation didorong oleh runner pengujian JUnit4 DeviceJUnit4ClassRunner. Struktur keseluruhan class pengujian sama dengan pengujian JUnit4 reguler:

  • @BeforeClass
  • @Before
  • @Test
  • @After
  • @AfterClass
  • Assume, Assert

Memperluas BaseHostJunit4Test adalah cara untuk mewarisi API utilitas pengujian yang berguna seperti:

  • installPackage: Memungkinkan penginstalan APK di perangkat target.
  • installPackageAsUser: Memungkinkan penginstalan APK sebagai pengguna di perangkat target perangkat.
  • uninstallPackage: Memungkinkan penghapusan APK.
  • isPackageInstalled: Memeriksa apakah paket diinstal atau tidak.
  • hasDeviceFeature: Memeriksa apakah perangkat mendukung fitur atau tidak. (pm list features)
  • runDeviceTests(DeviceTestRunOptions options): Menjalankan pengujian instrumentasi terhadap perangkat target menggunakan DeviceTestRunOptions untuk menangani semua opsi yang memungkinkan.

Juga memberikan akses ke objek perangkat Tradefed:

  • getDevice(): Menampilkan objek perangkat TF untuk memanipulasi perangkat.
  • getBuild(): Menampilkan objek TF info build untuk mendapatkan informasi tentang build.
  • getAbi(): Menampilkan ABI yang digunakan pengujian.

Dukungan Tradefed: Persiapan dan pembersihan perangkat per class

@BeforeClass dan @AfterClass JUnit4 hanya berlaku untuk metode statis, yang membuat penanganan #getDevice() tidak dapat digunakan untuk melakukan penyiapan atau pembersihan khusus perangkat, satu kali, per class. Untuk mengatasi masalah ini, gunakan anotasi Tradefed.

  • @BeforeClassWithInfo: Berjalan sebelum anotasi @BeforeClass
  • @AfterClassWithInfo: Berjalan setelah anotasi @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 memungkinkan Anda menggunakan perangkat dan menyimpan properti yang dapat digunakan dalam cakupan statis atau non-statis. BaseHostJUnit4Test mendukung perolehan TestInformation dalam cakupan non-statis melalui #getTestInformation().

Jika tidak memperluas BaseHostJUnit4Test, Anda dapat menerapkan ITestInformationReceiver untuk menerima objek TestInformation.

Cara mengonfigurasi pengujian yang didorong host di Tradefed?

Dalam file konfigurasi XML Tradefed, pengujian yang didorong host dijalankan melalui HostTest runner.

<test class="com.android.tradefed.testtype.HostTest" >
    <option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>