Pecahan pengujian

Ketika korpus pengujian besar atau waktu eksekusi menjadi lama, kami menawarkan kemungkinan pemisahan pengujian di beberapa perangkat: sharding.

Sharding memiliki prasyarat agar runner pengujian mendukung sharding.

Sebagian besar runner pengujian utama sudah mendukung sharding, sehingga tidak ada perlu bekerja. Pengujian ini sudah mendukung sharding: pengujian instrumentasi, pengujian yang didorong sisi host, GTest.

Ada dua jenis sharding yang kami dukung di Tradefed: lokal dan terdistribusi. Keduanya memiliki beberapa kesamaan, sehingga halaman ini menjelaskan properti umum, lalu spesifikasi masing-masing.

Properti umum

Kedua bentuk sharding mengasumsikan properti yang sama dari runner pengujian: Shard harus independen dan deterministik. Langkah pertama dari kedua sharding adalah mem-build daftar lengkap pengujian yang diurutkan, lalu membaginya menjadi grup/shard yang berbeda.

Perbedaan utama dari bentuk sharding adalah cara menjalankan pengujian. Detail selengkapnya ada pada bagian di bawah.

Sharding lokal

Sharding lokal berarti semua perangkat yang terlibat dalam eksekusi sharding panggilan terhubung ke {i> host<i} fisik yang sama.

Eksekusi

Sharding lokal memanfaatkan semua perangkat yang terhubung ke host yang sama dengan membuat kumpulan pengujian yang perlu dieksekusi dan membuat setiap perangkat melakukan polling pengujian saat tidak ada tugas (yaitu, selesai dengan pengujian sebelumnya). Hal ini menghasilkan penggunaan perangkat yang dioptimalkan. Kami juga menyebutnya sharding dinamis.

Opsi

--shard-count XX

Sharding terdistribusi

Sharding terdistribusi berarti semua perangkat yang terlibat dalam eksekusi pemanggilan yang di-shard dapat berada di mana saja dan terhubung ke host fisik yang berbeda.

Eksekusi

Sharding terdistribusi terjadi setelah membuat daftar pengujian, dan konten setiap shard hanya mengeksekusi shard yang saat ini diminta. Jadi, semua shard terdistribusi akan menyusun daftar yang sama terlebih dahulu, lalu menjalankan subset eksklusif, yang mengakibatkan semua pengujian dijalankan.

Properti utama dari bentuk ini adalah shard yang sama sekali tidak mengetahui satu sama lain dan dapat gagal secara terpisah.

Kelemahan utamanya adalah panjang shard tidak selalu seimbang karena kita tidak dapat memprediksi runtime setiap pengujian di setiap shard sebelumnya. Distribusi dibuat agar memiliki jumlah kasus pengujian yang kurang lebih sama di setiap shard.

Opsi

--shard-count XX --shard-index XX

Sharding token

Sharding token hanya dapat digunakan dengan sharding lokal. Penandanya adalah tidak beroperasi dalam kasus penggunaan sharding non-lokal. Terkadang salah satu perangkat yang terlibat dalam sharding memiliki resource khusus yang tidak dimiliki orang lain, seperti SIM . Beberapa tes mungkin hanya berfungsi ketika sumber daya khusus itu tersedia dan akan gagal jika tidak.

Sharding token adalah solusi kami untuk kasus penggunaan tersebut. Modul pengujian dapat mendeklarasikan resource khusus mana yang mereka butuhkan di AndroidTest.xml, dan Tradefed merutekan pengujian ke perangkat yang memiliki resource.

Konfigurasi XML

<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />

value token cocok dengan Tradefed TokenProperty dan dikaitkan dengan handler di TokenProviderHelper.

Hal ini memungkinkan modul pengujian dijalankan pada perangkat yang dapat menjalankan pengujian dengan benar.

Bagaimana jika tidak ada perangkat yang dapat menjalankan pengujian?

Jika tidak ada perangkat yang tersedia yang memiliki resource yang cocok dengan modul pengujian, modul pengujian gagal dan dilewati karena tidak dapat dijalankan dengan benar.

Misalnya, jika modul pengujian meminta kartu SIM untuk dijalankan tetapi tidak ada perangkat yang memiliki Kartu SIM, modul pengujian gagal.

Implementasi

Teruskan tombol fitur ini ke command line utama Tradefed:

--enable-token-sharding