Mengotomatiskan pengujian UI

Menguji interaksi pengguna membantu memastikan pengguna tidak menemukan hasil yang tidak terduga atau memiliki pengalaman buruk saat berinteraksi dengan aplikasi Anda. Anda harus terbiasa membuat pengujian antarmuka pengguna (UI) jika perlu memverifikasi bahwa UI aplikasi Anda berfungsi dengan benar.

Salah satu pendekatan terhadap pengujian UI adalah meminta penguji manusia melakukan serangkaian operasi pengguna pada aplikasi target dan memverifikasi bahwa aplikasi tersebut berperilaku dengan benar. Namun, pendekatan manual ini bisa memakan waktu dan rawan kesalahan. Pendekatan yang lebih efisien adalah menulis pengujian UI sedemikian rupa sehingga tindakan pengguna dilakukan secara otomatis. Pendekatan otomatis memungkinkan Anda untuk menjalankan pengujian dengan cepat dan andal serta dapat diulang.

Pengujian UI meluncurkan aplikasi (atau bagian darinya), lalu menyimulasikan interaksi pengguna, dan akhirnya memeriksa apakah aplikasi memberikan reaksi yang sesuai. Pengujian ini adalah pengujian integrasi yang dapat berkisar dari verifikasi perilaku komponen kecil hingga pengujian navigasi besar yang melintasi seluruh alur pengguna. Fitur ini berguna untuk memeriksa regresi dan memverifikasi kompatibilitas dengan berbagai API level dan perangkat fisik.

Pengujian UI berinstrumen di Android Studio

Untuk menjalankan pengujian UI berinstrumen menggunakan Android Studio, terapkan kode pengujian dalam folder pengujian Android yang terpisah - src/androidTest/java. Android Plugin untuk Gradle membuat aplikasi pengujian berdasarkan kode pengujian Anda, lalu memuat aplikasi pengujian di perangkat yang sama dengan aplikasi target. Dalam kode pengujian, Anda dapat menggunakan framework pengujian UI untuk menyimulasikan interaksi pengguna pada aplikasi target, untuk melakukan tugas pengujian yang mencakup skenario penggunaan tertentu.

Framework Jetpack

Jetpack mencakup berbagai framework yang menyediakan API untuk menulis pengujian UI:

  • Framework pengujian Espresso (Android 4.0.1, API level 14, atau yang lebih tinggi) menyediakan API untuk menulis pengujian UI guna menyimulasikan interaksi pengguna dengan View dalam satu aplikasi target. Manfaat utama menggunakan Espresso adalah karena Espresso menyediakan sinkronisasi otomatis tindakan pengujian dengan UI aplikasi yang Anda uji. Espresso mendeteksi kapan thread utama tidak ada aktivitas, sehingga dapat menjalankan perintah pengujian Anda pada waktu yang tepat, sehingga meningkatkan keandalan pengujian Anda.
  • Jetpack Compose (Android 5.0, API level 21 atau yang lebih tinggi) menyediakan sekumpulan API pengujian untuk meluncurkan dan berinteraksi dengan layar dan komponen Compose. Interaksi dengan elemen Compose disinkronkan dengan pengujian dan memiliki kontrol penuh atas waktu, animasi, dan rekomposisi.
  • UI Automator (Android 4.3, API level 18 atau yang lebih tinggi) adalah framework pengujian UI yang cocok untuk pengujian UI fungsional lintas aplikasi di seluruh sistem dan aplikasi terinstal. UI Automator API memungkinkan Anda untuk melakukan operasi seperti membuka menu Setelan atau peluncur aplikasi pada perangkat pengujian.
  • Robolectric (Android 4.1, API level 16 atau yang lebih tinggi) memungkinkan Anda membuat pengujian lokal yang berjalan di workstation atau lingkungan continuous integration di JVM biasa, bukan pada emulator atau perangkat. Aplikasi ini dapat menggunakan API pengujian Espresso atau Compose untuk berinteraksi dengan komponen UI.

Kegagalan dan sinkronisasi

Sifat asinkron dari aplikasi dan framework seluler sering kali mempersulit penulisan pengujian yang andal dan dapat diulang. Saat peristiwa pengguna dimasukkan, framework pengujian harus menunggu aplikasi selesai bereaksi terhadapnya, yang dapat berkisar dari perubahan beberapa teks di layar hingga pembuatan ulang sepenuhnya dari suatu aktivitas. Jika pengujian tidak memiliki perilaku deterministik, pengujian tersebut tidak stabil.

Framework modern seperti Compose atau Espresso dirancang dengan mempertimbangkan pengujian, sehingga ada jaminan tertentu bahwa UI akan tidak ada aktivitas sebelum tindakan atau pernyataan pengujian berikutnya. Ini adalah sinkronisasi.

Menguji sinkronisasi

Masalah masih dapat muncul saat Anda menjalankan operasi asinkron atau latar belakang yang tidak diketahui dalam pengujian, seperti memuat data dari database atau menampilkan animasi tanpa batas.

diagram alir menunjukkan loop yang memeriksa apakah aplikasi tidak ada aktivitas sebelum membuat pengujian lulus
Gambar 1: Menguji sinkronisasi.

Untuk meningkatkan keandalan rangkaian pengujian, Anda dapat menginstal cara untuk melacak operasi latar belakang, seperti Resource Idling Espresso. Selain itu, Anda dapat mengganti modul untuk menguji versi yang dapat Anda buat kuerinya untuk status tidak ada aktivitas atau yang meningkatkan sinkronisasi, seperti TestDispatcher untuk coroutine atau RxIdler untuk RxJava.

Diagram yang menunjukkan kegagalan uji saat sinkronisasi didasarkan pada proses menunggu waktu tetap
Gambar 2: Menggunakan tidur dalam pengujian menyebabkan uji yang lambat atau tidak stabil.

Penyiapan arsitektur dan pengujian

Arsitektur aplikasi Anda harus memungkinkan pengujian menggantikan bagian-bagiannya untuk pengujian ganda dan Anda harus menggunakan library yang menyediakan utilitas untuk membantu pengujian. Misalnya, Anda dapat mengganti modul repositori data dengan versi dalam memori yang menyediakan data deterministik palsu untuk pengujian.

Pembuatan dan pengujian diagram arsitektur. Diagram produksi menunjukkan sumber data lokal dan jarak jauh yang menyediakan data ke repositori, yang kemudian menyediakannya secara asinkron ke UI. Diagram pengujian menampilkan repositori Palsu yang menyediakan datanya secara sinkron ke UI.
Gambar 3: Menguji UI dengan mengganti dependensinya dengan yang palsu.

Pendekatan yang direkomendasikan untuk mengaktifkan fungsi ini adalah menggunakan injeksi dependensi. Anda dapat membuat sistem Anda sendiri secara manual, tetapi sebaiknya gunakan framework DI seperti Hilt untuk hal ini.

Mengapa melakukan pengujian secara otomatis?

Aplikasi Android dapat menargetkan ribuan perangkat yang berbeda di banyak API level dan faktor bentuk, dan tingginya penyesuaian yang diberikan OS kepada pengguna berarti aplikasi Anda dapat dirender dengan tidak benar atau bahkan error di beberapa perangkat.

Pengujian UI memungkinkan Anda melakukan pengujian kompatibilitas, yang memverifikasi perilaku aplikasi dalam konteks yang berbeda. Anda mungkin ingin menjalankan pengujian UI pada perangkat yang bervariasi dengan cara berikut:

  • Level API: 21, 25, dan 30.
  • Lokal: Inggris, Arab, dan China.
  • Orientasi: Potret, lanskap.

Selain itu, aplikasi harus memeriksa perilaku di luar ponsel. Anda harus melakukan pengujian pada tablet, perangkat foldable, dan perangkat lainnya.

Referensi lainnya

Untuk informasi selengkapnya tentang membuat pengujian UI, lihat referensi berikut.

Dokumentasi

Codelab