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, jadi tidak ada perlu bekerja. Solusi ini sudah mendukung sharding: uji instrumentasi, pengujian yang dijalankan sisi host, yaitu GTest.
Ada dua jenis sharding yang kami dukung di Tradefed: lokal dan terdistribusi. Mereka memiliki beberapa kesamaan, jadi halaman ini menjelaskan sifat-sifat umum dan kemudian spesifikasinya masing-masing.
Properti umum
Kedua bentuk sharding mengasumsikan properti yang sama dari runner pengujian: Shard harus independen dan deterministik. Langkah pertama dari kedua sharding ini adalah untuk membangun daftar pengujian yang diurutkan secara lengkap dan kemudian membaginya menjadi grup/shard yang berbeda.
Perbedaan utama dari formulir sharding terletak pada cara mereka 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 {i>host<i} dengan membuat kumpulan pengujian yang perlu dijalankan dan meminta masing-masing pengujian polling perangkat saat masih tersedia (yaitu, dilakukan dengan pengujian sebelumnya). Hal ini menghasilkan pemanfaatan 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-sharding dapat berada di mana saja dan terhubung ke berbagai sumber {i>host<i}.
Eksekusi
Sharding terdistribusi terjadi setelah daftar pengujian dan isi 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 sama sekali tidak menyadari masing-masing satu sama lain dan bisa gagal secara terpisah.
Kelemahan utamanya adalah panjang shard tidak selalu seimbang hanya dengan karena kita tidak dapat memprediksi terlebih dahulu runtime setiap pengujian di setiap shard. Distribusi dilakukan agar memiliki jumlah kasus pengujian yang kira-kira sama dalam 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
TokenProperty
dan dikaitkan dengan handler di
TokenProviderHelper
.
Hal ini memungkinkan modul pengujian dijalankan pada perangkat yang dapat menjalankan pengujian.
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 Tradefed utama:
--enable-token-sharding