Menulis runner pengujian Tradefed

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.