Tulis Tes Berbasis Tuan Rumah di Federasi Perdagangan

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

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

  • host-driven test: Adalah pengujian yang berjalan pada host yang berinteraksi dengan satu atau lebih perangkat. Sistem yang sedang diuji (SUT) tidak pada host itu sendiri tetapi sedang diuji dari host.
  • pengujian sisi host: Adalah pengujian yang murni berjalan pada host dan menguji sesuatu hanya pada host, misalnya pengujian unit.

Mengapa membuat tes berbasis host daripada tes instrumentasi?

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

Pengujian berbasis host juga dapat mendorong langkah penyiapan tambahan yang memerlukan interaksi dengan perangkat eksternal tempat pengujian bergantung.

Pengujian berbasis host dapat menangani kasus penggunaan ini dan memungkinkan pengujian lanjutan perangkat dengan lebih banyak skenario. Jika Anda berada dalam situasi itu, menulis tes yang digerakkan oleh host adalah yang paling masuk akal.

Bagaimana tes berbasis host ditulis dalam TF?

Berikut adalah contoh:

@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 berbasis host di Federasi Perdagangan didorong oleh runner pengujian JUnit4 DeviceJUnit4ClassRunner . Struktur keseluruhan kelas tes sama dengan tes JUnit4 biasa:

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

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

  • installPackage : Memungkinkan untuk menginstal APK pada perangkat target.
  • installPackageAsUser : Memungkinkan untuk menginstal APK sebagai pengguna di perangkat target.
  • uninstallPackage : Memungkinkan untuk mencopot pemasangan APK.
  • isPackageInstalled : Periksa apakah suatu paket diinstal atau tidak.
  • hasDeviceFeature : Periksa apakah perangkat mendukung fitur atau tidak. ( pm list features )
  • runDeviceTests(DeviceTestRunOptions options) : Jalankan uji instrumentasi terhadap perangkat target menggunakan DeviceTestRunOptions untuk menangani semua opsi yang memungkinkan.

Juga menyediakan akses ke objek perangkat Tradefed:

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

Dukungan tradefed: Persiapan dan pembersihan perangkat per kelas

JUnit4 @BeforeClass dan @AfterClass hanya berlaku untuk metode statis, yang membuatnya tidak mungkin menggunakan #getDevice() untuk melakukan beberapa pengaturan atau pembersihan khusus perangkat, satu kali, per kelas. Untuk mengatasi masalah ini, gunakan anotasi Tradefed.

  • @BeforeClassWithInfo: Berjalan sebelum penjelasan @BeforeClass
  • @AfterClassWithInfo: Berjalan setelah penjelasan @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 untuk menggunakan perangkat dan menyimpan properti yang dapat digunakan baik dalam lingkup statis atau non-statis. BaseHostJUnit4Test mendukung mendapatkan TestInformation dalam lingkup non-statis melalui #getTestInformation() .

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

Bagaimana cara mengonfigurasi pengujian berbasis host di Tradefed?

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

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