Jika korpus pengujian besar atau waktu eksekusi menjadi lama, kami menawarkan kemungkinan untuk membagi pengujian di beberapa perangkat: sharding.
Sharding memiliki prasyarat agar peluncuran pengujian mendukung sharding.
Sebagian besar pelari pengujian utama sudah mendukung sharding sehingga tidak diperlukan pekerjaan tambahan. Berikut yang 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, jadi halaman ini menjelaskan properti umum dan kemudian spesifikasi masing-masing.
Properti umum
Kedua bentuk sharding mengasumsikan properti yang sama dari pelaksana pengujian: Shard harus independen dan deterministik. Langkah pertama dari kedua pembagian adalah membuat daftar pengujian lengkap yang diurutkan, lalu membaginya ke dalam grup/shard yang berbeda.
Perbedaan utama bentuk sharding adalah cara mereka menjalankan pengujian. Detail selengkapnya ada di bagian di bawah.
Sharding lokal
Sharding lokal berarti semua perangkat yang terlibat dalam eksekusi pemanggilan yang di-shard terhubung ke host fisik yang sama.
Eksekusi
Sharding lokal memanfaatkan semua perangkat yang terhubung ke host yang sama dengan membuat kumpulan pengujian yang perlu dijalankan dan membuat setiap perangkat melakukan polling pengujian saat perangkat tersebut tidak digunakan (yaitu, selesai 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-shard dapat berada di mana saja dan terhubung ke host fisik yang berbeda.
Eksekusi
Sharding terdistribusi terjadi saat membuat daftar pengujian, dan konten setiap shard hanya menjalankan shard yang saat ini diminta. Jadi, semua shard terdistribusi membuat daftar yang sama terlebih dahulu, lalu menjalankan subset yang saling eksklusif, sehingga semua pengujian dijalankan.
Properti utama formulir ini adalah bahwa shard tidak saling mengetahui dan dapat gagal secara terpisah.
Kelemahan utamanya adalah panjang shard tidak selalu seimbang hanya karena kita tidak dapat memprediksi terlebih dahulu runtime setiap pengujian di setiap shard. Distribusi dilakukan agar setiap shard memiliki jumlah kasus pengujian yang kurang lebih sama.
Opsi
--shard-count XX --shard-index XX
Pecahan token
Penyebaran token hanya dapat digunakan dengan penyebaran lokal. Flag ini tidak dapat dioperasikan dalam kasus penggunaan sharding non-lokal. Terkadang salah satu perangkat yang terlibat dalam sharding menyimpan resource khusus yang tidak dimiliki perangkat lain, seperti kartu SIM. Beberapa pengujian mungkin hanya berfungsi jika resource khusus tersebut tersedia dan akan gagal jika tidak.
Pecahan token adalah solusi kami untuk kasus penggunaan tersebut. Modul pengujian dapat
mendeklarasikan resource khusus yang mereka butuhkan di AndroidTest.xml
, dan
Tradefed merutekan pengujian ke perangkat yang memiliki resource tersebut.
Konfigurasi XML
<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />
value
token cocok dengan
TokenProperty
Tradefed
dan dikaitkan dengan pengendali di
TokenProviderHelper
.
Hal ini memungkinkan modul pengujian dijalankan terhadap 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 akan gagal dan dilewati karena tidak dapat dieksekusi dengan benar.
Misalnya, jika modul pengujian meminta kartu SIM untuk dijalankan, tetapi tidak ada perangkat yang memiliki kartu SIM, modul pengujian akan gagal.
Implementasi
Teruskan tanda fitur ini ke command line Tradefed utama:
--enable-token-sharding