Menulis pengujian yang didorong host di Trade Federation

Halaman ini menjelaskan cara menulis pengujian perangkat gaya JUnit4 yang digerakkan oleh host. Ini berarti bahwa sisi {i>host<i} dari memanfaatkan memicu tindakan terhadap perangkat.

Perhatikan bahwa kami mempertimbangkan "sisi host" pengujian dan "berbasis host" pengujian menjadi sedikit berbeda:

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

Mengapa membuat pengujian berbasis host, bukan uji instrumentasi?

Beberapa pengujian mungkin mengharuskan Anda memengaruhi status perangkat secara keseluruhan, seperti mengeluarkan {i>reboot<i}. Dalam kasus uji instrumentasi, {i>reboot<i} akan mematikan instrumentasi, uji tidak dapat dilanjutkan, dan tidak akan tersedia hasil.

Pengujian yang didorong host juga dapat mendorong langkah penyiapan tambahan yang memerlukan interaksi dengan perangkat eksternal yang diandalkan untuk pengujian.

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

Bagaimana pengujian berbasis host ditulis dalam TF?

Berikut 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 dilakukan host di Trade Federation didorong oleh DeviceJUnit4ClassRunner Runner pengujian JUnit4. 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 target perangkat seluler.
  • uninstallPackage: Memungkinkan penginstalan APK.
  • isPackageInstalled: Memeriksa apakah paket terinstal atau tidak.
  • hasDeviceFeature: Memeriksa apakah perangkat mendukung suatu fitur atau tidak. (pm list features)
  • runDeviceTests(DeviceTestRunOptions options): Menjalankan instrumentasi menguji perangkat target menggunakan DeviceTestRunOptions untuk menangani semua opsi yang tersedia.

Selain itu, berikan akses ke objek perangkat Tradefed:

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

Dukungan tukar tambah: Penyiapan dan pembersihan perangkat per kelas

@BeforeClass dan @AfterClass JUnit4 hanya berlaku untuk metode statis, sehingga tidak mungkin menggunakan pengendali #getDevice() untuk melakukan khusus perangkat, satu kali, per kelas, dan pembersihan. 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 baik dalam ruang lingkup statis atau non-statis. BaseHostJUnit4Test mendukung mendapatkan TestInformation dalam cakupan non-statis melalui #getTestInformation().

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

Bagaimana cara mengonfigurasi pengujian yang didorong host di Tradefed?

Dalam file konfigurasi XML Tradefed, pengujian berbasis host dijalankan melalui HostTest {i>runner<i}.

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