Pengujian screenshot adalah cara yang sangat efektif untuk memverifikasi UI aplikasi Anda. Pengujian screenshot dapat ada dalam pengujian Komponen, Fitur, dan Aplikasi.
Anda dapat menggunakan alat pihak ketiga untuk membuat pengujian screenshot lokal dan berinstrumen. Jika menggunakan Compose, Anda dapat menggunakan alat pengujian Screenshot Pratinjau Compose resmi.
Definisi
Pengujian screenshot mengambil screenshot UI dan membandingkannya dengan gambar yang disetujui sebelumnya, yang disebut "referensi" atau "emas":
Jika gambar sama, pengujian akan lulus. Jika ada perbedaan di antara mereka, alat ini akan membuat laporan:
Dengan laporan tersebut, Anda memiliki dua kemungkinan jawaban:
- Perhatikan bahwa ada error dalam kode baru, lalu perbaiki.
- Setujui screenshot baru dan ganti gambar referensi dengan gambar baru.
Pengujian screenshot memiliki alur kerja yang berbeda dengan pengujian reguler karena pengujian yang gagal tidak selalu berarti ada error.
Kelebihan
Keuntungan atau pengujian screenshot adalah:
- Pengujian screenshot melakukan beberapa pernyataan per pengujian. Misalnya, satu pengujian dapat memeriksa warna, margin, ukuran, dan font.
- Pengujian screenshot jauh lebih mudah ditulis, dipahami, dan dikelola daripada pengujian perilaku yang setara.
- Hal ini sangat berguna saat memverifikasi dan mendeteksi regresi pada berbagai ukuran layar.
Kekurangan
Namun, pengujian screenshot juga dapat memiliki kekurangan:
- Menangani gambar referensi bisa jadi merepotkan, karena project besar mungkin memiliki ribuan PNG.
- Platform yang berbeda (Linux, Max, dan Windows) akan menghasilkan screenshot yang sedikit berbeda.
- Pengujian ini lebih lambat daripada pengujian perilaku yang setara.
- Memiliki banyak pengujian screenshot dapat menyebabkan masalah, misalnya saat satu perubahan memengaruhi ribuan screenshot.
Bagian berikut memberikan rekomendasi untuk mengatasi masalah ini.
Membatasi pengujian screenshot seminimal mungkin
Anda harus meminimalkan jumlah pengujian screenshot sekaligus memaksimalkan masukan dan cakupan untuk regresi.
Kombinasi berbagai status UI dapat meningkatkan jumlah pengujian dengan sangat cepat. Berikut adalah beberapa cara untuk memverifikasi bagian UI aplikasi Anda:
- Pada tema yang berbeda
- Menggunakan ukuran font yang berbeda
- Di dalam berbagai ukuran atau batas layar
Jika Anda melakukannya untuk setiap komponen, tata letak, dan layar aplikasi, Anda akan mendapatkan ribuan file screenshot, yang sebagian besar tidak memberikan masukan tambahan.
Misalnya, jika Anda ingin menguji tombol kustom dengan tema terang dan gelap, dan dengan 3 ukuran font, Anda tidak perlu membuat kombinasi dari ketiganya. Sebagai gantinya, Anda dapat memilih salah satu tema. Hal ini karena cara tombol bereaksi terhadap kata panjang tidak berpengaruh pada tema.
Menyimpan gambar referensi
Gambar referensi (atau emas) biasanya berupa file PNG yang dapat diperiksa ke dalam kontrol sumber Anda. Namun, Git dan sebagian besar pengelola kontrol sumber dioptimalkan untuk file teks, bukan file biner besar.
Anda memiliki 3 opsi untuk mengelola file ini:
- Terus gunakan git, tetapi coba minimalkan penggunaan penyimpanan.
- Gunakan Git LFS.
- Gunakan layanan cloud untuk mengelola screenshot.
Perbedaan platform
Pengujian screenshot mengandalkan API platform level rendah untuk menggambar fitur tertentu seperti teks atau bayangan, dan platform dapat menerapkannya dengan cara yang berbeda. Jika Anda mengembangkan di Mac dan menyimpan screenshot baru yang diambil secara lokal, Anda mungkin melihat pengujian yang rusak di mesin CI Linux.
Ada 2 cara untuk mengatasi masalah ini:
- Mentoleransi perubahan kecil
- Mengambil screenshot di server
Mentoleransi perubahan kecil
Anda dapat mengonfigurasi sebagian besar library pengujian screenshot untuk memungkinkan perbedaan kecil saat membandingkan dua screenshot.
Ada dua pendekatan untuk ini:
- Konfigurasikan toleransi berdasarkan persentase piksel yang diubah atau persentase total perbedaan nilai piksel.
- Gunakan smart differ—algoritma yang membandingkan screenshot—untuk memverifikasi kemiripan struktural dan semantik, bukan piksel.
Kekurangan dari pendekatan ini adalah dapat menghasilkan positif palsu (PP), dan tidak mendeteksi error yang berada di bawah nilai minimum, atau secara keliru dianggap cukup mirip.
Mengambil screenshot di server
Untuk menggunakan pembanding screenshot yang sempurna, Anda harus memastikan bahwa pengujian mengambil screenshot dalam kondisi yang sama. Untuk melakukannya, Anda dapat menggunakan sistem Continuous Integration (CI) atau menggunakan layanan cloud.
Misalnya, Anda dapat membuat langkah dalam alur kerja CI yang melakukan hal berikut:
- Menjalankan pengujian screenshot (hanya diperlukan jika tidak menggunakan pencocokan piksel sempurna).
- Merekam screenshot baru jika langkah sebelumnya gagal.
- Melakukan commit file baru ke cabang.
Dengan pendekatan ini, pengujian screenshot tidak pernah gagal di CI, tetapi akan mengubah perubahan untuk Anda. Dengan demikian, Anda dan peninjau perubahan dapat menerima screenshot baru dengan menggabungkan perubahan.
Alat pengujian screenshot
Pertimbangkan perbedaan utama berikut antara alat dan library yang tersedia untuk pengujian screenshot:
- Lingkungan: Pengujian lokal yang berjalan pada host, atau pengujian berinstrumen yang berjalan pada emulator atau perangkat.
- Mesin rendering: Solusi screenshot sisi host dapat menggunakan Layoutlib—mesin rendering Android
Studio untuk pratinjau—atau Robolectric Native Graphics (RNG).
- Framework berbasis Layoutlib berfokus pada rendering komponen statis, menggunakan status yang berbeda untuk menampilkan perilaku yang berbeda. Mereka biasanya lebih mudah digunakan.
- Framework yang terintegrasi dengan RNG dapat menggunakan semua fitur dari Robolectric, sehingga memungkinkan pengujian dengan cakupan yang lebih besar.