Menulis runner pengujian Tradefed

Halaman ini menjelaskan cara menulis runner pengujian baru di Tradefed.

Latar belakang

Jika Anda ingin mengetahui tempat runner pengujian dalam arsitektur Tradefed, lihat Struktur Runner Pengujian.

Hal ini bukan prasyarat untuk menulis runner pengujian baru; runner pengujian dapat ditulis secara terpisah.

Persyaratan minimum: Mengimplementasikan antarmuka

Persyaratan minimum untuk memenuhi syarat sebagai runner pengujian Tradefed adalah mengimplementasikan antarmuka IRemoteTest dan khususnya metode run(TestInformation testInfo, ITestInvocationListener listener).

Metode ini adalah metode yang dipanggil oleh harness saat menggunakan runner pengujian, mirip dengan Java Runnable.

Setiap bagian dari metode tersebut dianggap sebagai bagian dari eksekusi runner pengujian.

Melaporkan hasil dari runner pengujian

Metode run di antarmuka dasar memberikan akses ke objek listener berjenis ITestInvocationListener. Objek ini adalah kunci untuk melaporkan hasil terstruktur dari runner pengujian ke harness.

Dengan melaporkan hasil terstruktur, runner pengujian memiliki properti berikut:

  • Melaporkan daftar yang tepat dari semua pengujian yang dijalankan, durasi pengujian, dan apakah pengujian tersebut lulus, gagal, atau status lainnya secara individual.
  • Melaporkan metrik yang terkait dengan pengujian jika berlaku, misalnya metrik waktu penginstalan.
  • Cocok dengan sebagian besar alat infrastruktur, misalnya menampilkan hasil dan metrik, dll.
  • Biasanya lebih mudah di-debug karena ada pelacakan eksekusi yang lebih mendetail.

Meskipun demikian, pelaporan hasil terstruktur bersifat opsional; runner pengujian mungkin hanya ingin menilai status keseluruhan pengujian sebagai LULUS atau GAGAL tanpa detail eksekusi sebenarnya.

Peristiwa berikut dapat dipanggil di listener untuk memberi tahu harness tentang progres eksekusi saat ini:

  • testRunStarted: Memberi tahu awal grup kasus pengujian yang terkait.
    • testStarted: Memberi tahu awal kasus pengujian yang dimulai.
    • testFailed/testIgnored: Memberi tahu perubahan status kasus pengujian yang sedang berlangsung. Kasus pengujian tanpa perubahan status dianggap lulus.
    • testEnded: Memberi tahu akhir kasus pengujian.
  • testRunFailed: Memberi tahu bahwa status keseluruhan eksekusi grup kasus pengujian adalah kegagalan. Pengujian dapat lulus atau gagal terlepas dari hasil kasus pengujian bergantung pada ekspektasi eksekusi. Misalnya, program biner yang menjalankan beberapa kasus pengujian dapat melaporkan semua kasus pengujian lulus tetapi dengan kode keluar error (karena alasan apa pun: file bocor, dll.).
  • testRunEnded: Memberi tahu akhir grup kasus pengujian.

Mempertahankan dan memastikan urutan callback yang tepat adalah tanggung jawab pengimplementasi runner pengujian, misalnya memastikan testRunEnded dipanggil jika terjadi pengecualian menggunakan klausa finally.

Callback kasus pengujian (testStarted, testEnded, dll.) bersifat opsional. Pengujian dapat terjadi tanpa kasus pengujian.

Anda mungkin melihat bahwa struktur peristiwa ini terinspirasi dari struktur JUnit yang umum. Hal ini dilakukan dengan sengaja agar tetap dekat dengan sesuatu yang mendasar yang biasanya diketahui oleh developer.

Melaporkan log dari runner pengujian

Jika Anda menulis class atau runner pengujian Tradefed sendiri, Anda akan mengimplementasikan IRemoteTest dan mendapatkan ITestInvocationListener melalui metode run(). Listener ini dapat digunakan untuk mencatat file log sebagai berikut:

    listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);

Menguji dengan perangkat

Antarmuka minimum di atas memungkinkan menjalankan pengujian yang sangat sederhana yang terisolasi dan tidak memerlukan resource tertentu, misalnya pengujian unit Java.

Penulis pengujian yang ingin melanjutkan ke langkah berikutnya dari pengujian perangkat akan memerlukan antarmuka berikut:

  • IDeviceTest memungkinkan menerima objek ITestDevice yang mewakili perangkat yang sedang di uji dan menyediakan API untuk berinteraksi dengannya.
  • IBuildReceiver memungkinkan pengujian mendapatkan objek IBuildInfo yang dibuat pada langkah penyedia build yang berisi semua informasi dan artefak yang terkait dengan penyiapan pengujian.

Runner pengujian biasanya tertarik dengan antarmuka ini untuk mendapatkan artefak yang terkait dengan eksekusi, misalnya file tambahan, dan mendapatkan perangkat yang sedang diuji yang akan ditargetkan selama eksekusi.

Menguji dengan beberapa perangkat

Tradefed mendukung menjalankan pengujian di beberapa perangkat secara bersamaan. Hal ini berguna saat menguji komponen yang memerlukan interaksi eksternal, seperti pairing ponsel dan jam tangan.

Untuk menulis runner pengujian yang dapat menggunakan beberapa perangkat, Anda akan perlu mengimplementasikan IMultiDeviceTest, yang akan memungkinkan Anda menerima peta ITestDevice ke IBuildInfo yang berisi daftar lengkap representasi perangkat dan informasi build terkait.

Setter dari antarmuka akan selalu dipanggil sebelum metode run, sehingga aman untuk mengasumsikan bahwa struktur akan tersedia saat run dipanggil.

Pengujian yang mengetahui penyiapannya

Beberapa implementasi runner pengujian mungkin memerlukan informasi tentang penyiapan keseluruhan agar dapat berfungsi dengan baik, misalnya beberapa metadata tentang pemanggilan, atau target_preparer mana yang dijalankan sebelumnya, dll.

Untuk mencapainya, runner pengujian dapat mengakses objek IConfiguration yang menjadi bagiannya dan tempatnya dieksekusi. Lihat deskripsi objek konfigurasi untuk mengetahui detail selengkapnya.

Untuk implementasi runner pengujian, Anda harus mengimplementasikan IConfigurationReceiver untuk menerima objek IConfiguration.

Runner pengujian fleksibel

Runner pengujian dapat memberikan cara yang fleksibel untuk menjalankan pengujian jika memiliki kontrol mendetail atas pengujian tersebut, misalnya runner pengujian JUnit dapat menjalankan setiap pengujian unit secara individual.

Hal ini memungkinkan harness dan infrastruktur yang lebih besar untuk memanfaatkan kontrol yang mendetail tersebut dan pengguna untuk menjalankan runner pengujian sebagian melalui pemfilteran.

Dukungan pemfilteran dijelaskan dalam antarmuka ITestFilterReceiver, yang memungkinkan Anda menerima kumpulan filter include dan exclude untuk pengujian yang harus atau tidak boleh dijalankan.

Konvensi kami adalah pengujian akan dijalankan JIKA cocok dengan satu atau beberapa filter sertakan DAN tidak cocok dengan filter kecualikan. Jika tidak ada filter sertakan yang diberikan, semua pengujian harus dijalankan selama tidak cocok dengan filter kecualikan.