Halo, pada postingan ini kita akan belajar bagaimana cara melakukan testing di aplikasi yang dibangun menggunakan framework laravel. Berbeda dengan testing yang sering kita coba dan terapkan di tutorial-tutorial sebelumnya, testing yang akan kita coba itu bukan testing manual, melainkan menggunakan package phpunit dan Laravel BrowserKit Testing. Show Table of Contents
Kenapa tiba-tiba ingin pakai phpunit dan bukan testing secara manual? Ya, ada ceritanya saya mencoba menggunakan phpunit ini. Saya cerita dikita ya... Beberapa waktu yang lalu,
alhamdulillah saya menerima job untuk maintenance project yang sudah running di production. Selain maintenance, client meminta saya untuk melakukan penambahan fitur juga. Setelah melakukan proses analisis dan desain, coding dan sampai pada proses testing. Biasanya untuk proses testing ini saya lakukan secara manual. Saya tulis dulu fitur apa saja yang mau saya testing, lalu saya coba fitur itu satu per satu. Sekali lagi, saya coba satu per satu. Kalau satu fitur masih bisa saya coba, kalau
banyak gimana? Masih bisa juga, tetapi setelah selesai testing, eh ternyata sudah habis beberapa hari. Dan setelah testing pun, kadang kepikiran, gimana kalau user begini, gimana kalau user input begitu, eh tadi ada yang kelewat testing nya ga ya, dan lain-lain. Di sini saya perlu pendekatan berbeda untuk proses testing dan kalau bisa diotomatiskan. Setelah googling dan baca-baca mengenai testing, banyak yang membahas tentang penggunaan PHPUnit adalah sebuah framework testing untuk PHP dan merupakan sebuah instance dari xUnit architecture untuk unit testing framework. Dengan menggunakan PHPUnit ini kita bisa melakukan pengujian dengan cara menuliskan skenario pengujian dalam bentuk kode. Jadi yang tadi awalnya testing secara manual, nanti bisa melakukan testing dengan bantuan PHPUnit ini. Setiap kali terpikir skenario untuk testing, nanti bisa dituangkan langsung dalam bentuk kode. Setelah baca-baca bagian dokumentasinya, phpunit ini bisa kita install melalui composer.
Untuk yang sudah terbiasa menggunakan laravel, phpunit ini sudah terintegrasi secara default dengan laravel. Kita bisa cek di file
Setelah googling tentang phpunit ini, saya coba terapkan di aplikasi CRUD sederhana hasil dari tutorial Belajar Laravel 8 edisi sebelumnya. Biasanya uji coba tutorial itu saya tuliskan manual, kini saya coba gunakan phpunit untuk testing. Berikut ini tahapan yang saya coba saat melakukan testing fitur CRUD yang ada di aplikasi.
PrasyaratSeperti yang sudah disebutkan sebelumnya, aplikasi yang saya coba testing di tutorial ini adalah hasil belajar laravel 8 edisi sebelumnya tentang membuat aplikasi CRUD sederhana. Oleh karena itu untuk mengikuti tutorial ini, teman-teman boleh selesaikan terlebih dahulu project aplikasi CRUD sederhana di tutorial sebelumnya. Setelah project selesai, kita bisa langsung mulai langkah berikutnya Step 1: SetupBaik, sebelum memulai persiapan, instalasi package tambahan yang diperlukan, dan rangkaian test lainnya, kita coba run dulu phpunit yang sebelumnya sudah tersedia di dalam framework laravel. Buka terminal, lalu kita run phpunit.
Kita bisa lihat output seperti berikut ini di terminal:
Dari output di atas, kita bisa lihat ada dua tests yang sudah disediakan secara default ketika laravel diinstall dan hasilnya itu ok, tanda sudah sesuai. Ada dua file testing yang berhasil ditest, yaitu Selanjutnya kita edit pengaturan phpunit. Buka file
Studi kasus kita kali ini adalah melakukan testing untuk fitur CRUD, jadi kita perlu atur terlebih dahulu database yang akan kita gunakan. Di sini kita akan coba memakai sqlite sebagai database untuk keperluan testing. Kita hapus tanda komentar untuk
Selanjutnya kita install package
Kita tunggu sampai proses install package selesai. Selanjutnya buka file
Sampai tahapan ini kita sudah bisa melakukan testing. Kita coba test menggunakan contoh sederhana. Buka file
Setelah itu kita run kembali phpunit.
Kurang lebih outputnya seperti berikut ini.
Bisa kita lihat, proses testing untuk contoh nya berjalan dengan baik dan tidak ada error. Jadi ketika proses testing, Kalau menguji coba secara manual, ketika aplikasi kita run dan kita buka halaman awal di browser, kita bisa melihat tulisan Untuk melihat testing yang hasilnya gagal, teman-teman bisa coba ubah tulisan Step 2: buat class testing dan definisikan feature yang akan di-testingUntuk melakukan test fitur CRUD manajemen post, kita akan coba buat class khusus untuk handle proses test. Katakanlah nama class-nya itu Baik, kita buat dulu class-nya menggunakan
Selanjutnya buka class
Ya, nama method untuk testing panjang-panjang dan sebisa mungkin deskriptif sesuai dengan proses testing-nya. Jadi ketika ada hasil yang gagal atau fail nanti merujuk langsung ke method testing yang bersangkutan. Selanjutnya kita coba test menggunakan
Kurang lebih output yang ditampilkan di terminal seperti ini.
Ya, terdapat 6 test,
8 assertions dan hasil testnya sukses. Kita perhatikan lagi sample testing-nya terdapat function Step 3: test create new postKita akan melakukan test untuk fitur yang pertama, yaitu membuat post baru. Skenario untuk alur test fitur membuat post baru:
Buka kembali file class
Bisa kita lihat pada baris kode di atas, proses
testingnya kita sesuaikan dengan alur test-nya. Apakah hasil testnya sukses? Kita coba run kembali
Dan hasil output nya adalah:
Ya, hasil testnya sukses. Misalkan untuk penasaran kalau hasil testnya failed atau gagal itu seperti apa. Kita bisa coba edit di bagian
Lalu di method
Ketika kita run
Ya, tampil error Note: Misalkan ada error sewaktu kita nulis kode testing, kita perbaiki kode errornya, lalu run kembali phpunit, dan begitu seterusnya sampai hasilnya itu sukses. Step 4: test browse post index pageFitur berikutnya yang akan kita test adalah browse post index page atau membuka halaman daftar post. Skenario alur untuk testnya kita definisikan seperti ini:
Kita buka lagi file
Karena
kita menambahkan post baru, jangan lupa tambahkan statement Selanjutnya kita coba run testing.
Dan kita bisa lihat output-nya kurang lebih seperti di bawah ini.
Step 5: test update existing postSelanjutnya kita test proses update data post dan skenario alur testingnya seperti ini.
Selanjutnya kita sesuaikan isi
Setelah
selesai kita ketik baris kode di atas, kita run kembali testing menggunakan
Dan outputnya adalah sebagai berikut:
Hasilnya sesuai dengan skenario yang sebelumnya kita definisikan. Step 6: test delete existing dataFitur terakhir yang akan kita test adalah fitur delete data post. Skenario alur testingnya kita definisikan seperti di bawah ini.
Selanjutnya kita sesuaikan isi
Setelah selesai, kita run kembali
Dan outputnya adalah seperti di bawah ini:
Ya, ada 6 test, 26 assertions dan hasilnya OK atau sukses. PenutupSetelah mencoba menggunakan phpunit untuk proses testing ini ada satu hal yang yang menjadi pembeda dengan testing manual, yaitu kita perlu coding script untuk testing. Tampak seperti kerja dua kali, karena harus menuliskan kode untuk testing setelah aplikasinya jadi. Tapi tampaknya ini sepadan dengan manfaat yang dirasakan. Ada beberapa catatan setelah menggunakan phpunit untuk testing.
Selanjutnya Gimana?Ada beberapa hal yang bisa kita tingkatkan untuk aplikasi CRUD sederhana hasil belajar laravel 8 edisi sebelumnya supaya lebih test-able, dengan menambahkan skenario seperti kita menguji coba dengan membuka aplikasinya langsung di browser, misalkan ada proses klik link untuk edit data, ada proses klik button untuk delete dan lain-lain. Kita bisa juga menambahkan testing untuk validasi ketika proses menambahkan data ataupun memperbaharui data post. Selain itu ada beberapa hal yang bisa kita pelajari lebih lanjut, misalnya best practice untuk testing ini seperti apa, tentang Test Drivent Development (TDD) atau tentang automated testing yang (mungkin) akan dibahas di postingan selanjutnya. Demikian catatan saya ketika belajar testing untuk aplikasi yang dibangun menggunakan framework Laravel 8. Semoga bermanfaat. |