Tulis tes berbasis host di Federasi Perdagangan

Halaman ini menjelaskan cara menulis pengujian perangkat bergaya JUnit4 yang dijalankan oleh host. Ini berarti sisi host dari rangkaian kabel akan memicu tindakan terhadap perangkat.

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

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

Mengapa membuat pengujian berbasis host dan bukan pengujian instrumentasi?

Beberapa pengujian mungkin mengharuskan Anda 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-langkah penyiapan tambahan yang memerlukan interaksi dengan perangkat eksternal yang menjadi sandaran pengujian.

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

Bagaimana tes berbasis host ditulis dalam TF?

Berikut ini 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 berbasis host di Federasi Perdagangan dijalankan oleh test runner DeviceJUnit4ClassRunner JUnit4. Struktur keseluruhan kelas pengujian sama dengan pengujian 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 pada perangkat target.
  • uninstallPackage : Memungkinkan untuk menghapus instalasi APK.
  • isPackageInstalled : Periksa apakah suatu paket diinstal atau tidak.
  • hasDeviceFeature : Periksa apakah perangkat mendukung suatu fitur atau tidak. ( pm list features )
  • runDeviceTests(DeviceTestRunOptions options) : Jalankan uji instrumentasi terhadap perangkat target menggunakan DeviceTestRunOptions untuk menangani semua opsi yang memungkinkan.

Berikan juga 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 diuji.

Dukungan Tradefed: Persiapan dan pembersihan perangkat per kelas

JUnit4 @BeforeClass dan @AfterClass hanya berlaku untuk metode statis, sehingga tidak mungkin menggunakan penangan #getDevice() untuk melakukan penyiapan atau pembersihan khusus perangkat, satu kali, per kelas. 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 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 mengkonfigurasi tes berbasis host di Tradefed?

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

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