Detox vs Appium: Perbandingan end to end test (automation test) untuk aplikasi React Native
Salah satu hal penting di dalam proses software development adalah memastikan bahwa task yang dikerjakan (baik fitur, bug fixing, enhancement, dan lain-lain) berjalan sesuai dengan yang diharapkan. Definisi dari sesuai dengan yang diharapkan adalah sesuai dengan test case yang (idealnya) di buat sebelum proses development atau bisa juga sesuai dengan user acceptance test (UAC).
Untuk memastikannya, ada beberapa jenis test case yang dapat dilakukan, yaitu unit testing, integration testing, dan end to end testing.
Unit testing adalah pengujian pada bagian-bagian terkecil seperti pengujian method atau fungsi. Unit testing ini bertujuan untuk memastikan bahwa algoritma yang dibuat sesuai dengan output yang diharapkan. Misalkan, kamu membutuhkan fungsi untuk mengetahui nama bulan dari format unix time. Maka unit testing yang dibuat kira-kira seperti ini.
import getMonthName from './format';test('will get month name from unix time', () => {
expect(getMonthName(1613963381)).toBe('february');
});
Integration testing adalah pengujian pada integrasi unit-unit kecil (kumpulan method) hingga berbentuk satu flow use case. Misalnya adalah pada test login. Di dalam flow login ini, mungkin akan terdapat beberapa method seperti validasi input email/username dan validasi password.
End to end (E2E) testing adalah testing secara keseluruhan dengan mensimulasikan user sebagai pengguna akhir software yang dibuat. E2E ini dapat mereduksi pekerjaan manual testing sehingga proses development lebih cepat.
Artikel ini akan membahas perbandingan E2E testing di mobile application (cross platform) menggunakan 2 tools yang ada, yaitu Detox dan Appium.
Goals
Tujuan tulisan ini adalah memberikan overview dan referensi untuk developer (baik QA engineer, tech lead, mobile developer, atau stake holder lain) mengenai tools yang tepat untuk dipakai melengkapi proses testing, yaitu antara Detox dan Appium.
Terminologi
Detox
Detox merupakan framework testing yang menggunakan pendekatan gray box testing dengan memantau status aplikasi untuk mengatasi masalah pengujian yang tidak stabil (flakiness). Tes yang tidak stabil membuat test case gagal tanpa perubahan pada kode. Pengujian gray box berarti bahwa tester memiliki pemahaman parsial tentang struktur internal sistem yang diuji. Memantau status aplikasi maksudnya bahwa Detox memantau aplikasi untuk mengetahui kapan aplikasi itu ‘idle’. Pengujian tidak dapat dilanjutkan ke baris berikutnya jika aplikasi sibuk menjalankan kode pengujian sebelumnya. Detox adalah test-runner independen, yang berarti developer dapat menggunakan test-runner apa pun yang diinginkan. Rangkaian pengujian dijalankan di luar aplikasi dan berkomunikasi dengan aplikasi melalui jaringan menggunakan websocket, sedangkan server Detox bertindak sebagai proxy. Setelah pemanggilan metode oleh test runner (seperti Jest), server Detox memanggil metode pengujian native yang sesuai dari framework Pengujian EarlGrey di iOS atau dari framework Pengujian Espresso Android.
Appium
Appium merupakan testing framework yang menggunakan framework otomatis seperti XCUITest dari Apple dan UIAutomator dari Google, yang dibungkus oleh API Webdriver. Appium adalah webserver yang mengekspos REST API, seperti yang ditunjukkan pada gambar di bawah. Ia menerima koneksi dari client, listen command, mengeksekusi perintah tersebut di mobile device, dan merespons dengan respons HTTP yang mewakili hasil eksekusi command. Perbedaan utama antara Appium dan Detox adalah Appium menggunakan black-box-testing, artinya Appium tidak memantau status internal aplikasi. Black-box-testing didefinisikan sebagai teknik pengujian di mana fungsionalitas aplikasi diuji tanpa melihat struktur internal kode.
Metode perbandingan
Metode yang digunakan adalah studi literatur. Artikel ini ditulis hasil baca-baca experience orang lain yang kemudian mereka tulis sehingga bisa dijadikan bahan untuk membandingkan. Aspek yang dilihat adalah dari sisi cost, setup time, lama implementasi, learning curve, adaptability, flakiness, speed of test, coverage, dan kompatibilitas
Hasil
- Cost
Baik Detox maupun Appium itu open source, jadi tidak memerlukan biaya tambahan
- Setup time
Pada Detox, setting up aplikasi untuk iOS test sampai bisa running sampel test adalah 30 menit. Untuk Android, memakan waktu 1 jam.
Untuk integrasi Appium, setting up nya memakan waktu 12 hours.
- Lama implementasi
- Learning curve
Dokumentasi Detox cukup rinci dan mudah dipahami, yang mempercepat proses belajar bagi developer.
Dokumentasi untuk Appium tidak sebaik dokumentasi Detox dan semuanya biasa-biasa saja, karena secara umum ada lebih banyak ‘learning’ tambahan yang diperlukan. Juga lebih sulit untuk mendapatkan gambaran umum dan pemahaman tentangnya, karena ia menggunakan tiga kerangka kerja yang berbeda sekaligus, bukan satu: Appium, Webdriver.io dan Jasmine versus hanya Detox.
- Adaptability
Kedua framework sama sama mudah untuk di adjust dan diperluas fungsionalitasnya. Tes ini dapat dengan mudah diextend dengan menambahkan lebih banyak test case dengan clausa it() — dan menambahkan lebih banyak pernyataan await ()-. Tes juga mudah diadaptasi dengan menggunakan id atau teks berbeda dari elemen UI yang berbeda dan dengan mengganti berbagai metode Detox seperti “replaceText ()” .
Seperti halnya Detox, di Appium pun setiap pengujian terdapat dalam klausa it () -, sehingga kita dapat dengan mudah menambahkan lebih banyak pengujian atau memperluas pengujian dengan menambahkan lebih banyak pernyataan $() -. Juga kode dapat dengan cepat disesuaikan dengan elemen UI lainnya dengan mengubah label di dalam $ () — klausa dan mengganti metode webdriver.io seperti misalnya setValue () dengan metode lain.
- Flakiness
Flakiness maksudnya adalah kegagalan test padahal kodenya sama, bisanya diakibatkan karena network request atau device yang lambat.
Dalam Detox, banyak pengujian yang sama yang dijalankan selalu memberikan hasil yang sama, jadi flakiness bukanlah masalah.
Di Appium, untuk kode yang sama, terkadang ia gagal testnya. Jadi flakiness di Appium menjadi masalah.
- Speed of test
- Coverage
di appium, kita tidak bisa query untuk komponen Alert
- Kompatibilitas
Dengan Detox, metode swipe() hanya berfungsi di iOS. Memperbesar dan memperkecil gambar (zooming) hanya dapat dilakukan dengan iOS. Untuk iOS, back navigation dari aplikasi SMS eksternal tidak bisa dilakukan
Kesimpulan
Selisih perbedaanya adalah 13 point, di mana Detox menjadi opsi yang lebih baik untuk dipakai sebagai end to end testing pada aplikasi berbasis React Native.