Skip to main content

Belajar Testing Flask Application dengan pytest dan pytest-cov

Kali ini saya belajar membuat dan melakukan test sederhana untuk web app berbasis Flask yang saya kembangkan.

Sekedar merefresh kembali, saya mengembangkan sebuah aplikasi web sederhana berbasis Python dan Flask untuk unit UPPM di kampus tempat saya bekerja.

Sebagai seorang newbie, novice, pemula atau apalah namanya, saya mencoba belajar melakukan kerja coding sesuai best practices yang ada di kalangan dunia pemrograman komputer/IT.

Nah, salah satu komponen dalam best practices tersebut adalah software testing.

Ini sama sekali baru untuk saya yang tidak berasal dari latar belakang pendidikan IT. Meskipun demikian Alhamdulillah dengan ikut bootcamp kemarin dan mengikuti berbagai forum diskusi online maupun offline tentang IT sedikit banyak cukup membantu mencari tahu apa saja komponen yang penting dalam tahapan software development.

Karena aplikasi web yang saya buat berbasis Python dan Flask, maka setelah saya searching kesana kemari dan membandingkan library seperti unittest dan pytest, maka saya memutuskan mengambil yang paling mudah dan straightforward untuk saya pahami yaitu pytest dan pytest-cov.

Library pytest adalah library yang akan saya gunakan untuk melakukan test terhadap kode yang telah saya tulis, sedangkan pytest-cov akan turut membantu dalam menganalisis code coverage saya yang telah di-test.

Mengapa test coverage penting saat kita mengembangkan suatu perangkat lunak?

Kalau menurut artikel ini, test coverage didefinisikan sebagai:

Test coverage is defined as a technique which determines whether our test cases are actually covering the application code and how much code is exercised when we run those test cases. If there are 10 requirements and 100 tests created and if 90 tests are executed then test coverage is 90%.

Artinya bahwa test coverage merupakan salah satu indikator yang bisa menggambarkan sejauh mana (rasio) keseluruhan kode yang kita tulis dapat secara andal menjalankan fungsinya.

Belajar dari tulisan Patrick Kennedy ini, (yang saya rasa cukup mudah diikuti dan dipahami serta setidaknya tulisan tersebut membuat "lampu" di atas kepala saya jadi menyala lebih cepat karena biasanya perlu waktu lama sebelum si bohlam bisa menyala he he...) testing Flask app dengan pytest (dan juga library lain) dibagi jadi beberapa level, yaitu:

  1. Unit test (test pada level unit terkecil yang dapat di tes)
  2. Functional (test yang dilakukan terhadap suatu fungsi yang sudah mengintegrasikan beberapa unit/tugas di dalam kode), dan
  3. End-to-end (test keseluruhan kode)

Menurut Patrick, testing akan meningkatkan maintainability kode yang kita tulis. Gampangnya, akan semakin mudah dikelola dan dilakukan pemeliharaan terhadap kode tersebut.

Masih di artikel yang sama, ia menjelaskan secara gamblang APA yang perlu dites, misalnya:

Pada sebuah aplikasi Flask, kita dapat menerapkan unit tes untuk:

  1. Database models
  2. Fungsi untuk utilitas/proses yang dipanggil di view functions (misal fungsi-fungsi di dalam routes.py)

Sementara functional test dilakukan khusus untuk testing operasi fungsi-fungsi view, misalnya untuk:

  1.  Melakukan cek kondisi nominal (GET, POST) pada suatu fungsi di routes
  2.  Invalid HTTP method yang dihandle dengan baik di dalam fungsi di routes
  3.  Invalid data yang dipass ke dalam fungsi di routes

Untuk itu kita sebagai developer perlu membuat skenario yang mungkin terjadi saat user berinteraksi dengan perangkat lunak yang kita buat sehingga semua interaksi tersebut dapat dikelola dengan baik sesuai desain software dan ekspektasi kita di awal development.

Belajar menggunakan pytest dan pytest-cov

Nah, dari sini saya memutuskan mulai belajar membuat test cases untuk menguji kode yang telah saya buat. Kode ini sendiri aslinya berasal dari gabungan ribuan snippets yang ada di internet. Cukup untuk mengukuhkan predikat newbie saya lah.. he he he...

Belajar testing Flask application dengan pytest dan pytest-cov

Saya baru mencoba membuat unit test karena rasanya ini yang paling sederhana. Jadi dengan ini baru testing kalau misalnya data diinput ke model database akan bisa dikonfirmasi bahwa data yang akan diproses adalah sama.

Untuk functional test, saya baru coba membuat satu test yang mencontek dari dokumentasi pytest dan salah satu posing di SO kalau tidak salah ingat. Di situ kita setting client dengan pytest fixture, sehingga kita bisa memanggil fungsi client tersebut sebagai argumen pada saat melakukan functional test.

Nah isi dari test sendiri yaitu sederhana karena hanya melakukan request terhadap endpoint yang terdapat di routes.py. Kalau berhasil dan response code adalah 200 serta di response.data terdapat kata/kalimat tertentu sebagaimana kita desain, maka test berhasil.

www.carikutu.com
www.carikutu.com

Ok, semoga bermanfaat! :) .....

Comments

Popular posts from this blog

Belajar Coding Intensive Bootcamp Online 300 ribuan selama Sebulan dapat apa saja?

Sekedar catatan sedikit tentang apa yang saya pelajari saat mengikuti online intensive coding bootcamp kelas project React Native selama sebulan kemarin. Pada umumnya cukup menantang karena setiap hari harus catch up dengan materi yang diberikan dan tugas harian (ya, tugasnya pun setiap hari, jadi peserta mau tidak mau harus coding tiap hari). Selain itu ada quiz tiap akhir pekan atau dalam kasus kelas project tiap akhir pekan harus menyelesaikan Mini Project yang merupakan bagian dari Final Project. Lalu apa saja yang dipelajari selama sebulan tersebut? (dengan biaya Rp 300 K itu? *atau Rp 200K karena saya dapat voucher 100rb). Beberapa hal yang saya pelajari: SplashScreen dan onBoarding  Register (dengan OTP)  Login (dengan JWT ke API Sanbercode, Google Sign In dengan firebase, serta local sign in dengan sidik jari / fingerprint)  Passing data dengan menggunakan route.params melalui navigation, passing data dengan konteks ({useContext}) serta melalui props  Home Page kekinian meman

Cara Mengambil Foto dengan RNCamera dan Upload Foto ke API di React Native

Berikut ini catatan singkat saya saat belajar mengambil dan upload foto ke API menggunakan React Native yang saya pelajari saat mengikuti Indonesia Mengoding Intensive Coding Bootcamp React Native Kelas Project yang diadakan Sanbercode. Sebelumnya, bukan bermaksud iklan, namun pengalaman saya mengikuti batch online intensive coding bootcamp di Sanbercode cukup recommended (khususnya jika kita sudah memiliki sedikit saja dasar pengetahuan programming. Jika belum ada dasar pengalaman pemrograman, Sanbercode juga menawarkan kelas dasar yang bisa diikuti pemula). Jadi ini adalah honest review. Saya sendiri telah mengambil kelas Laravel Web Devt (30 hari), React Native Dasar (30 hari) dan React Native lanjutan atau kelas project (30 hari). Investasi totalnya hanya 700 ribu rupiah (3 bulan intensive online bootcamp!), itu jika tanpa potongan.  Dengan biaya 200 ribu rupiah untuk kelas dasar dan 300 ribu rupiah untuk kelas project, saya rasa jika dibandingkan Coding Bootcamp lain yang harga

Cara atau Solusi Mengatasi java.lang.OutOfMemoryError :app:mergeDexRelease FAILED saat Build APK di React Native

 Pernah mengalami error java.lang.OutOfMemoryError :app:mergeDexRelease FAILED saat Build APK di React Native? Ente nggak sendirian Ndan .. Saya juga pernah mengalami error serupa..   Cara mengatasi / solusi / obatnya ternyata cukup simple. Untuk memastikan bahwa pada saat build APK/AAB tidak terjadi OutofMemory error, kita bisa melakukan setting pada file gradle.     Nah, udah tenang kalau sudah ada build successfull hehe.. Semoga bermanfaat..