Ketika korpus pengujian besar atau waktu eksekusi menjadi lama, kami menawarkan kemungkinan untuk membagi pengujian di beberapa perangkat: sharding .
Sharding memiliki prasyarat bagi test runner untuk mendukung sharding.
Mayoritas pelari uji utama sudah mendukung sharding sehingga tidak diperlukan pekerjaan tambahan. Ini sudah mendukung sharding: uji instrumentasi, uji berbasis host-side, GTest.
Ada dua jenis sharding yang kami dukung di Tradefed: lokal dan terdistribusi. Mereka memiliki beberapa kesamaan, jadi kami akan menjelaskan sifat umum dan kemudian spesifikasi masing-masing.
Properti umum
Kedua bentuk sharding mengasumsikan properti yang sama dari runner pengujian: Shards harus independen dan deterministik . Langkah pertama dari kedua sharding adalah membangun daftar tes yang terurut lengkap dan kemudian membaginya menjadi kelompok/shard yang berbeda.
Perbedaan utama dari bentuk sharding adalah cara mereka menjalankan tes. Lebih detail di bagian di bawah ini.
sharding lokal
Sharding lokal berarti semua perangkat yang terlibat dalam pelaksanaan sharding doa terhubung ke host fisik yang sama.
Eksekusi
Sharding lokal memanfaatkan semua perangkat yang terhubung ke host yang sama dengan membuat kumpulan tes yang perlu dijalankan dan meminta setiap perangkat melakukan tes polling saat gratis (yaitu dilakukan dengan tes sebelumnya). Ini menghasilkan pemanfaatan perangkat yang dioptimalkan. Kami juga menyebutnya sharding dinamis .
Pilihan
--shard-count XX
Sharding terdistribusi
Sharding terdistribusi berarti semua perangkat yang terlibat dalam pelaksanaan sharding doa dapat hidup di mana saja dan terhubung ke host fisik yang berbeda.
Eksekusi
Pecahan terdistribusi terjadi saat membangun daftar pengujian, dan konten setiap pecahan akan melanjutkan untuk mengeksekusi hanya pecahan yang diminta saat ini. Jadi semua pecahan terdistribusi membangun daftar yang sama pada awalnya dan kemudian mengeksekusi subset yang saling eksklusif, yang menghasilkan semua pengujian yang dijalankan.
Properti utama dari formulir ini adalah pecahannya sama sekali tidak menyadari satu sama lain dan dapat gagal secara independen.
Kelemahan utama adalah bahwa panjang shard tidak selalu seimbang hanya karena kami tidak dapat memprediksi sebelumnya runtime setiap pengujian di setiap shard. Distribusi dibuat untuk memiliki jumlah kasus uji yang kira-kira sama di setiap pecahan.
Pilihan
--shard-count XX --shard-index XX
Pembagian token
Sharding token hanya dapat digunakan dengan sharding lokal. Bendera tidak akan beroperasi dalam kasus penggunaan sharding non-lokal. Terkadang salah satu perangkat yang terlibat dalam sharding memiliki sumber daya khusus yang tidak dimiliki perangkat lain, seperti kartu SIM. Beberapa tes mungkin hanya berfungsi ketika sumber daya khusus itu tersedia dan akan gagal jika tidak.
Pecahan token adalah solusi kami untuk kasus penggunaan semacam itu. Modul pengujian dapat mendeklarasikan sumber daya khusus mana yang mereka butuhkan di AndroidTest.xml
, dan Tradefed akan merutekan pengujian ke perangkat yang memiliki sumber daya tersebut.
konfigurasi XML
<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />
value
token cocok dengan TokenProperty Tradefed dan dikaitkan dengan handler di TokenProviderHelper .
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 sumber daya yang cocok dengan modul pengujian, modul pengujian akan 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 akan gagal.
Penerapan
Berikan tanda fitur ini ke baris perintah utama Tradefed:
--enable-token-sharding