Latar Belakang
Permasalahan
Salah satu kriteria test yang baik adalah memiliki coverage yang baik.
Tetapi lamanya waktu eksekusi seringkali jadi salah satu alasan untuk men-take out case-case yang ada agar test menjadi layak untuk ditunggu eksekusinya dan layak untuk dieksekusi sesering kebutuhan yang men-trigger-nya.
Untuk itu diperlukan langkah-langkah untuk mempersingkat waktu tunggu test semaksimal mungkin tanpa harus mengeluarkan case-case yang telah disiapkan sebelumnya.
Designed by Freepik |
Lingkungan Eksekusi Tes
Pada tulisan ini diasumsikan test dieksekusi pada lingkungan CI/CD yang:
1. menggunakan commandline katalonc
dari KRE (Katalon Runtime Engine).
2. Tiap job pipeline CI/CD bisa mengeksekusi beberapa test suite yang berbeda secara berurutan
Rekomendasi
Kesepakatan
Sepakati dengan user, batas waktu test maksimum
Batas waktu test perlu disepakati agar test bisa diakhiri dengan kesimpulan FAILED, jika melebihi batas waktu yang disepakati
Sepakati dengan user, batas waktu pergantian halaman maksimum
Tentukan nilai timeout sesuai kesepakatan dalam menemukan object test
Browser
Gunakan headless browser
Headless browser hampir selalu jauh lebih cepat dari pada browser biasa, perbedaan ini lebih signifikan terlihat jika membandingan antara browser Chrome vs Chrome (headless).
Peringatan:
Handling alert pada browser biasa tidak berlaku pada headless browser.
Sesedikit mungkin browser
Setiap browser yang digunakan memakan waktu untuk mempersiapkan/membukanya, karena itu:
1. Kurangi operasi membuka dan menutup browser
2. Kurangi jumlah test suite yang dieksekusi, termasuk juga jika menggunakan test suite collection, bedanya jika menggunakan test suite collection, seluruh browser yang akan digunakan diinisiasi sekaligus diawal test suite collection.
License
Gunakan offline license
Proses aktivasi Katalon secara online berjalan cukup lambat 1-2 menit, penggunaan offline license bisa mempersingkat proses ini menjadi beberapa detik saja.
Kurangi operasi aktivasi plugin
Proses aktivasi plugin Katalon berbeda dengan aktivasi Katalon yang bisa menggunakan offline license, jadi plugin akan diaktivasi secara online ditiap eksekusinya.
Hal-hal yang bisa mengurangi waktu aktivasi plugin:
1. Kurangi jumlah test suite yang dieksekusi, karena plugin diaktivasi diawal ekseksui setiap test suite.
2. Gunakan Test suite collection untuk mengurangi jumlah eksekusi aktivasi plugin, karena test suite collection hanya melakukan proses aktivasi plugin sekali diawal eksekusi collection
3. Gunakan local plugin, akan tetapi ini meningkatkan resiko file jar plugin masih di-lock oleh java meskipun testing sudah selesai.
Matikan online integration
Secara default Katalon menyalakan fitur integrasi dengan layanan online, seperti Azure, TestOps dan Test Cloud-nya. Yang seringkali fitur ini tidak diperlukan atau malah bisa menjadi issue tersendiri.
Yang jelas proses integrasi online ini memakan waktu, yang menambah total waktu menunggu hasil test. Jadi, jika dirasa tidak diperlukan fitur-fitur online integration ini sebaikanya dimatikan saja.
Script
Set angka timeout, jangan gunakan 0
0 adalah angka yang invalid sebagai angkat timeout, Katalon akan mengganti angka 0 dengan angka default dari timeout project. Akan tetapi sepertinya mekanisme Katalon dalam meng-handle angka 0 ini memperlambat eksekusi test.
Hindari delay()
gunakan wait...()
delay()
berarti proses script katalon berhenti tepat selama waktu yang diset oleh delay()
, tetapi seringkali object yang ditunggu bisa muncul lebih cepat dari waktu tersebut.
Sebagai gantinya lebih baik mengganti penggunaan delay()
dengan wait...()
yang akan secara berkala menguji apakah kondisi yang ditunggu sudah terpenuhi atau belum, jika sudah proses script akan langsung dilanjutkan.
Peringatan:
Pada halaman yang memakan resource CPU sangat besar, penggunaan wait...()
bisa menyebabkan crash pada browser.
Hindari stuck karena endless loop
Jika menggunakan while
, selalu gunakan limit/counter untuk membatasi jumlah perulangan yang mungkin dilakukan. Saat menjalankan test sangat mungkin terjadi hal yang tak terduga, berasumsi while
akan terhenti dengan kondisi yang didefiniskan bisa berakibat eksekusi test yang tidak memiliki akhir.
Tingkatkan parallelism
Optimasi jalannya test ada batasnya, seringkali teknik optimasi yang paling mudah adalah membaginya menjadi beberapa test yang berjalan secara bersamaan, sehingga waktu tunggu untuk mendapatkan hasilnya bisa jauh lebih singkat.
Independent & Repeateable test
Untuk menciptakan test yang independen/isolated salah satu elemen pentingnya ada kendali atas test data. Karena itu terkait data katalon script/pipeline job perlu untuk:
i. Data preparation operation
ii. Data cleanup operation
iii. Data driven
Selain test data, penggunaan service mock juga berpengaruh signifikan dalam meningkatkan independensi dan repeatability test tersebut
Scope test case yang kecil
Test case yang panjang selain sulit untuk dipersiapkan dan juga sulit untuk dipecah menjadi proses-proses yang dieksekusi secara paralel/bersamaan.
Hindari testing secara End To End (E2E), karena E2E testing mengharuskan testing berjalan secara sequential/berurutan.
E2E testing diperlukan sebagai teknik proofing/pembuktian bahwa target test sudah bekerja dengan benar, akan tetapi sifatnya yang sequential membuatnya tidak bisa dioptimasi menjadi proses yang paralel.
Gunakan test suite collection, gunakan parallel execution
Test suite collection memungkinkan untuk menjalankan beberapa test suite untuk dijalankan secara paralel pada browser yang berbeda-beda.
Peringatan:
Pastikan jumlah test paralel yang dieksekusi tidak sampai melebihi kemampuan sistem untuk beroperasi secara normal, karena justru akan memperlambat jalannya test.
Pecah project jika waktu membuka project > ... second
Menggunakan 1 test project besar seringkali terasa memudahkan dalam meng-handle banyak hal. Sehingga prinsip separation of concern seringkali terasa memberatkan.
Akan tetapi jika proses membuka project sudah dirasa terlalu lama, sebaiknya segera dipisah atau minimal tidak ditambah lagi isinya.
Jika ditambahkan terus waktu membuka project akan terus menanjak secara signifikan dan sangat mungkin akan tiba dititik project tersebut tidak lagi bisa dibuka.
Object locator
Prioritaskan menggunakan attribute id
atau name
Locator lebih mudah menemukan object yang unique pada 1 halaman, yang dipastikan unique pada 1 halaman (jika halaman tersebut disusun dengan benar/disiplin) adalah atribut id
. Object lain bisa dicari relative terhadap object tersebut dengan mudah. Atribut name
juga seringkali unique pada 1 halaman meskipun tidak harus seperti ini, sehingga bisa menjadi kandidat jika tidak ada id
yang bisa digunakan.
Absolute path sebagai alternatif
Absolute path sulit untuk di-maintain, dan juga akan menjadi yang paling cepat menjadi obsolete atau tidak berlaku lagi jika terjadi perubahan pada halaman web yang dites. Akan tetapi jika relative path yang bisa digunakan dinilai berjalan terlalu lambat, absolute path selalu bisa menjadi alternatif.
Kurangi jumlah login/logout
Test case yang kecil seringkali menjadikan perlunya login secara logout berulang atas nama test independency:
1. Pastikan kembali test independency sungguh bergantung proses kembali ke landing page dan login kembali, seringkali cukup dengan memulai proses dari halaman home user (setelah login), atau malah cukup dengan langsung menggunakan navigateToUrl()
2. Simpan cookies hasil login, dan restore untuk pada tiap test yang membutuhkan akses user setelah login
Tidak Terbukti Mempercepat
Penggunaan locator CSS
Beberapa tulisan menyatakan parser CSS berkembang dengan lebih baik dari pada parser XPath, sehingga lebih teroptimasi dari pada XPath.
Tetapi pada beberapa hasil percobaan tidak terlihat hasil yang sejalan dengan pernyataan tersebut.
Komentar
Posting Komentar