Konfigurasikan Sharding

Halaman ini menjelaskan apa yang mungkin untuk menyetel modul suite ( AndroidTest.xml ) melalui sharding dan mendapatkan kinerja kecepatan terbaik selama eksekusi berkelanjutan di lab. Kami akan mencoba menggambarkan opsi secara umum dengan rasional untuk menggunakan masing-masing.

Saat menjalankan suite secara terus-menerus di lab, suite biasanya dibagi ke beberapa perangkat untuk mengurangi waktu penyelesaian keseluruhan. Harness biasanya mencoba untuk menyeimbangkan waktu eksekusi setiap shard untuk meminimalkan waktu penyelesaian keseluruhan (ketika shard terakhir selesai); tetapi karena sifat dari beberapa tes, kami tidak selalu memiliki cukup introspeksi dan membutuhkan pemilik modul untuk menyesuaikan beberapa perilaku.

Dapat di-shardable atau tidak dapat di-shardable?

Anda dapat menandai modul ( AndroidTest.xml ) dengan <option name="not-shardable" value="true" /> untuk memberi tahu harness bahwa modul tersebut tidak boleh di-sharding.

Dalam modul biasa, membiarkan harness memecahkan modul Anda (perilaku default) adalah hal yang benar untuk dilakukan. Namun dalam beberapa kasus, Anda mungkin ingin mengganti perilaku itu:

  • Ketika pengaturan modul Anda mahal:

Membagi hasil modul dalam persiapan (instal APK, file push, dll.) mungkin dijalankan sekali per perangkat yang terlibat. Jika penyiapan modul Anda panjang dan mahal serta tidak layak untuk direplikasi dibandingkan dengan runtime pengujian, Anda harus menandai modul Anda sebagai tidak dapat di-shardable.

  • Ketika jumlah tes dalam modul Anda rendah:

Membagi hasil modul dalam semua kasus uji yang mungkin dijalankan secara independen pada perangkat yang berbeda. Ini berkaitan dengan poin pertama; jika jumlah tes Anda rendah, Anda mungkin berakhir dengan satu tes atau tidak ada tes di beberapa pecahan, yang akan membuat langkah persiapan menjadi cukup mahal. Menginstal APK untuk satu kasus uji biasanya tidak sepadan, misalnya.

Tes instrumentasi: Jumlah pecahan maksimum?

Pengujian instrumentasi yang berjalan melalui AndroidJUnitTest tidak memaparkan kepada harness berapa banyak pengujian yang merupakan bagian dari instrumentasi sampai kita benar-benar menginstal dan menjalankan APK. Operasi ini mahal dan tidak dapat dijalankan pada waktu sharding untuk semua modul bagian dari suite.

Harness mungkin terlalu merusak tes instrumentasi dan berakhir dengan beberapa pecahan kosong; sharding tes instrumentasi dengan lima tes di enam shard menghasilkan lima shard dengan satu tes dan satu shard tanpa tes. Masing-masing pecahan ini akan membutuhkan instalasi APK yang mahal.

Jadi, ketika jumlah pengujian dalam APK uji instrumentasi rendah, memberi tag pada modul dengan <option name="not-shardable" value="true" /> akan memungkinkan harness mengetahui sharding bahwa modul tidak sepadan.

Runner AndroidJUnitTest memiliki opsi khusus yang memungkinkannya menentukan jumlah maksimum pecahan yang diizinkan untuk dipecah menjadi: <option name="ajur-max-shard" value="5" /> .

Ini memungkinkan Anda untuk menentukan berapa kali instrumentasi dapat dipecah terlepas dari jumlah pecahan yang diminta pada tingkat pemanggilan. Secara default, instrumentasi akan dipecah menjadi jumlah pecahan yang diminta untuk pemanggilan.

Misalnya, jika APK pengujian instrumentasi Anda hanya berisi dua kasus uji tetapi Anda masih ingin shard, memiliki nilai ajur-max-shard 2 akan memastikan Anda tidak membuat shard kosong.