Menulis pengujian yang didorong host di Trade Federation

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

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

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

Mengapa membuat pengujian yang didorong host, bukan pengujian instrumentasi?

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

Pengujian yang didorong host juga dapat mendorong langkah penyiapan tambahan yang memerlukan interaksi dengan perangkat eksternal yang menjadi dependensi 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 berbasis host adalah pilihan yang paling tepat.

Bagaimana pengujian berbasis host ditulis dalam 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 pada perangkat target.
  • installPackageAsUser: Memungkinkan penginstalan APK sebagai pengguna pada perangkat target.
  • uninstallPackage: Memungkinkan untuk meng-uninstal APK.
  • isPackageInstalled: Memeriksa apakah paket terinstal atau tidak.
  • hasDeviceFeature: Memeriksa apakah perangkat mendukung fitur atau tidak. (pm list features)
  • runDeviceTests(DeviceTestRunOptions options): Jalankan pengujian instrumentasi terhadap perangkat target menggunakan DeviceTestRunOptions untuk menangani semua kemungkinan opsi.

Berikan juga 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 tukar tambah: Penyiapan dan pembersihan perangkat per kelas

@BeforeClass dan @AfterClass JUnit4 hanya berlaku untuk metode statis, sehingga tidak memungkinkan untuk menggunakan pengendali #getDevice() guna melakukan beberapa penyiapan atau pembersihan satu kali per class khusus perangkat. 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 mendapatkan TestInformation dalam cakupan non-statis melalui #getTestInformation().

Jika tidak memperluas BaseHostJUnit4Test, Anda dapat mengimplementasikan ITestInformationReceiver agar dapat menerima objek TestInformation.

Bagaimana cara mengonfigurasi pengujian yang didorong host di Tradefed?

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

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