Sharding pengujian

Ketika korpus pengujian besar atau waktu eksekusi menjadi lama, kami menawarkan kemungkinan untuk membagi pengujian ke beberapa perangkat: sharding .

Sharding memiliki prasyarat bagi test runner untuk mendukung sharding.

Mayoritas test runner utama sudah mendukung sharding sehingga tidak diperlukan pekerjaan tambahan. Ini sudah mendukung sharding: pengujian instrumentasi, pengujian berbasis sisi host, GTest.

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

Properti umum

Kedua bentuk sharding mengasumsikan properti yang sama dari pelari pengujian: Shard harus independen dan deterministik . Langkah pertama dari kedua sharding adalah membuat daftar tes yang diurutkan secara lengkap dan kemudian membaginya menjadi beberapa grup/sharding yang berbeda.

Perbedaan utama antara formulir sharding adalah cara mereka menjalankan pengujian. Detail lebih lanjut di bagian di bawah ini.

Pecahan lokal

Sharding lokal berarti semua perangkat yang terlibat dalam eksekusi pemanggilan sharding 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 meminta setiap perangkat melakukan pengujian polling saat bebas (yaitu, dilakukan dengan pengujian sebelumnya). Hal ini menghasilkan pemanfaatan perangkat yang dioptimalkan. Kami juga menyebutnya sharding dinamis .

Pilihan

--shard-count XX

Pecahan terdistribusi

Sharding terdistribusi berarti semua perangkat yang terlibat dalam eksekusi pemanggilan 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 mengeksekusi shard yang diminta saat ini. Jadi semua pecahan yang didistribusikan membuat daftar yang sama pada awalnya dan kemudian mengeksekusi subset yang saling eksklusif, yang mengakibatkan semua pengujian dijalankan.

Properti utama dari bentuk ini adalah pecahannya sama sekali tidak menyadari satu sama lain dan dapat gagal secara mandiri.

Kelemahan utamanya adalah panjang shard belum tentu seimbang hanya karena kita tidak dapat memprediksi terlebih dahulu waktu proses setiap pengujian di setiap shard. Distribusi dibuat agar 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. Tanda ini tidak berfungsi 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 pengujian mungkin hanya berfungsi jika sumber daya khusus tersebut tersedia dan sebaliknya akan gagal.

Sharding token adalah solusi kami untuk kasus penggunaan tersebut. Modul pengujian dapat mendeklarasikan sumber daya khusus mana yang diperlukan di AndroidTest.xml , dan Tradefed 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 pengendali 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 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

Teruskan tanda fitur ini ke baris perintah utama Tradefed:

--enable-token-sharding