Halaman ini menjelaskan cara menulis runner pengujian baru di Tradefed.
Latar belakang
Jika Anda ingin tahu tentang tempat pelaksana pengujian dalam arsitektur Tradefed, lihat Struktur Pelaksana Pengujian.
Ini bukan prasyarat untuk menulis test runner baru; test runner dapat ditulis secara terpisah.
Minimum: Terapkan antarmuka
Persyaratan minimum untuk memenuhi syarat sebagai pelaksana pengujian Tradefed adalah menerapkan
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 metode tersebut dianggap sebagai bagian dari eksekusi pelaksana pengujian.
Melaporkan hasil dari runner pengujian
Metode run
di antarmuka dasar memberikan akses ke objek pemroses berjenis ITestInvocationListener
. Objek ini adalah kunci untuk melaporkan hasil terstruktur dari runner pengujian ke harness.
Dengan melaporkan hasil terstruktur, pelari pengujian memiliki properti berikut:
- Laporkan daftar yang tepat dari semua pengujian yang dijalankan, durasinya, dan apakah masing-masing pengujian lulus, gagal, atau dalam status lainnya.
- Laporkan 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 rekaman aktivitas eksekusi yang lebih terperinci.
Namun, pelaporan hasil terstruktur bersifat opsional; pelari pengujian mungkin hanya ingin menilai status seluruh proses sebagai LULUS atau GAGAL tanpa detail eksekusi sebenarnya.
Peristiwa berikut dapat dipanggil pada pemroses untuk memberi tahu harness tentang progres eksekusi saat ini:
- testRunStarted: Memberi tahu awal grup kasus pengujian yang terkait.
- testStarted: Memberi tahu awal dimulainya kasus pengujian.
- 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 gagal. Jalannya pengujian dapat lulus atau gagal secara terpisah dari hasil kasus pengujian, bergantung pada apa yang diharapkan dari eksekusi. Misalnya, biner yang menjalankan beberapa kasus pengujian dapat melaporkan semua kasus pengujian lulus, tetapi dengan kode keluar error (karena alasan apa pun: file yang bocor, dll.).
- testRunEnded: Memberi tahu akhir grup kasus pengujian.
Mempertahankan dan memastikan urutan callback yang tepat adalah
tanggung jawab pelaksana test runner, misalnya memastikan bahwa
testRunEnded
dipanggil jika terjadi pengecualian menggunakan klausa finally
.
Callback kasus pengujian (testStarted
, testEnded
, dll.) bersifat opsional. Jalannya
pengujian dapat terjadi tanpa kasus pengujian apa pun.
Anda mungkin melihat bahwa struktur peristiwa ini terinspirasi dari struktur JUnit 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 menerapkan
IRemoteTest
dan mendapatkan ITestInvocationListener
melalui metode run()
. Pendengar ini
dapat digunakan untuk mencatat file sebagai berikut:
listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);
Menguji dengan perangkat
Antarmuka minimum di atas memungkinkan untuk menjalankan pengujian yang sangat sederhana yang terisolasi dan tidak memerlukan resource tertentu, misalnya pengujian unit Java.
Penulis pengujian yang ingin melanjutkan ke langkah berikutnya dalam pengujian perangkat akan memerlukan antarmuka berikut:
- IDeviceTest
memungkinkan penerimaan objek
ITestDevice
yang merepresentasikan perangkat yang sedang diuji 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 diuji yang akan ditargetkan selama eksekusi.
Menguji dengan beberapa perangkat
Tradefed mendukung pengujian di beberapa perangkat secara bersamaan. Hal ini berguna saat menguji komponen yang memerlukan interaksi eksternal, seperti penyambungan ponsel dan smartwatch.
Untuk menulis peluncur pengujian yang dapat menggunakan beberapa perangkat, Anda harus
menerapkan
IMultiDeviceTest,
yang akan memungkinkan penerimaan peta ITestDevice
ke IBuildInfo
yang berisi
daftar lengkap representasi perangkat dan informasi build terkaitnya.
Setter dari antarmuka akan selalu dipanggil sebelum metode run
, jadi
aman untuk mengasumsikan bahwa struktur akan tersedia saat run
dipanggil.
Pengujian yang mengetahui penyiapannya
Beberapa penerapan peluncur pengujian mungkin memerlukan informasi tentang penyiapan keseluruhan agar dapat berfungsi dengan benar, misalnya beberapa metadata tentang pemanggilan, atau target_preparer
mana yang berjalan sebelumnya, dll.
Untuk mencapainya, runner pengujian dapat mengakses objek IConfiguration
yang menjadi bagiannya dan tempat objek tersebut dieksekusi. Lihat deskripsi
objek konfigurasi
untuk mengetahui detail selengkapnya.
Untuk penerapan pelaksana pengujian, Anda harus menerapkan
IConfigurationReceiver
untuk menerima objek IConfiguration
.
Runner pengujian fleksibel
Peluncur pengujian dapat memberikan cara yang fleksibel untuk menjalankan pengujian jika memiliki kontrol terperinci atas pengujian tersebut, misalnya peluncur pengujian JUnit dapat menjalankan setiap pengujian unit secara terpisah.
Hal ini memungkinkan infrastruktur dan platform yang lebih besar memanfaatkan kontrol yang lebih baik tersebut dan pengguna dapat menjalankan pelari pengujian sebagian melalui pemfilteran.
Dukungan pemfilteran dijelaskan dalam
antarmuka ITestFilterReceiver,
yang memungkinkan penerimaan kumpulan filter include
dan exclude
untuk pengujian
yang harus atau tidak boleh dijalankan.
Konvensi kami adalah bahwa pengujian akan dijalankan IFF 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 salah satu filter kecualikan.