Kursus
Pengujian memberi Anda keyakinan bahwa kode Anda melakukan apa yang Anda harapkan. Dalam tutorial ini, kita akan mempelajari dasar-dasar test-driven development (TTD) menggunakan Python. Untuk memulai, kita akan membahas latar belakang test-driven development – apa itu dan mengapa menulis pengujian terlebih dahulu bermanfaat saat menulis kode. Kita akan mengambil pendekatan test-first, yaitu kita akan menulis kasus uji yang gagal terlebih dahulu untuk fungsi yang ingin kita implementasikan sebelum menulis fungsi sebenarnya.
Prasyarat Tutorial
Untuk tutorial ini, Anda memerlukan pemahaman dasar tentang Python; jika Anda perlu menyegarkan pengetahuan Python Anda, Anda dapat melihat kursus ini: Introduction to Python for Developers.
Pendekatan test-first akan membantu kita memikirkan perilaku yang diinginkan dan keluaran yang diharapkan. Anda dapat menggunakan berbagai pustaka untuk melakukan pengujian di Python, seperti pytest dan unnitest. Namun, untuk saat ini, kita akan fokus pada cara menulis kasus uji sederhana menggunakan Native Python yang akan memvalidasi bahwa fungsionalitas yang diinginkan menghasilkan keluaran yang diharapkan.
Kita akan mulai dengan sebuah kasus uji sederhana dan secara bertahap memperluas kasus uji untuk mencakup berbagai skenario. Saat kita memperluas kasus uji, kita mungkin menemukan bug atau celah dalam logika implementasi awal yang perlu kita perbaiki. Proses keseluruhan menulis kasus uji yang semakin canggih secara iteratif, melihatnya gagal, lalu kembali dan memperbaiki implementasi kita ini adalah inti dari test-driven development dengan Python.
Untuk tutorial ini, kita akan menggunakan DataLab, notebook data berbasis cloud dari DataCamp yang memungkinkan Anda menulis dan menjalankan kode Python tanpa perlu memasang apa pun secara lokal. Mari kita mulai!
Memulai dengan DataLab
Sebelum kita dapat memulai test-driven development, kita perlu menjelajahi DataLab dan memahami cara menggunakannya agar dapat membantu perjalanan belajar kita. Jika Anda membuka DataLab, Anda akan melihat banyak pilihan. Untuk saat ini, kita akan fokus pada penulisan Python di DataLab.

Jika Anda memilih Python, workbook akan membuka sebuah sel kode untuk Anda menulis Python. Tampilannya akan seperti ini:

Ada beberapa opsi berguna di sini. Misalnya, Anda dapat menjalankan sel untuk menghasilkan keluaran, menambahkan komentar atau catatan untuk mendukung pembelajaran Anda, serta memanfaatkan AI untuk membantu Anda memulai atau mengatasi hambatan. Anda juga dapat menambah atau menghapus sel sebanyak yang Anda perlukan. Kita akan fokus pada menjalankan sel dengan opsi "Run". Seperti yang terlihat pada kode di bawah, keluaran apa pun yang dihasilkan kode Anda akan dicatat di bawahnya saat Anda menjalankan sel.
Catatan singkat: Jika Anda menggunakan beberapa sel dan mendefinisikan sebuah variabel di satu sel tetapi mencoba mengaksesnya di sel lain, Anda perlu menjalankan setiap sel secara terpisah atau keseluruhan workbook (dari tombol "Run" di pojok kanan atas workbook Anda).

Sekarang kita sudah memahami dasar-dasar DataLab, mari mulai dengan test-driven development.
Test Driven Development
Test-driven development berarti menulis pengujian untuk kode Anda sebelum Anda menulis kodenya. Untuk menjelaskan TTD, mari mulai dengan contoh yang sangat sederhana yang melibatkan penulisan skrip Python untuk menjumlahkan angka. Namun, sebelum kita menulis fungsinya, kita akan menulis pengujian untuk memeriksa apakah 1 + 1 sama dengan 2. Anda dapat melakukannya menggunakan native Python seperti di bawah ini.
assert 1 + 1 == 2
Kata kunci assert dalam Python digunakan untuk menulis kasus uji dan memastikan bahwa kondisi program bernilai True. Ini memungkinkan Anda memvalidasi perilaku dan keluaran kode Anda. Ketika pernyataan assert gagal, Python akan melempar AssertionError, menandakan adanya masalah pada kode. Tampilannya akan seperti ini di workbook DataLab Anda:

Contoh 1: Menguji Fungsi Sederhana
Mari mulai dengan fungsi pengujian. Untuk memulai, buka file Python di DataLab. Test-driven development melibatkan penulisan pengujian yang gagal terlebih dahulu. Jadi, mari menulis pengujian yang gagal dengan memanggil fungsi add() yang belum didefinisikan.
assert add(1, 1) == 2
Ini akan menghasilkan NameError, yang menunjukkan bahwa belum ada implementasi, dikenal sebagai langkah "merah". Anda mendapatkan NameError ketika mencoba memanggil fungsi atau variabel yang belum didefinisikan.

Sekarang saatnya mengimplementasikan fungsinya. Kita dapat melakukannya dengan mendefinisikan fungsi:
def add(num1, num2):
return
Kita telah mendefinisikan fungsi add yang menerima dua parameter, num1 dan num2. Fungsi kita belum mengembalikan apa pun. Mari kita lihat apakah implementasi fungsi kita lulus pengujian!

Kita tidak lagi melihat NameError. Namun, menjalankan sel masih menghasilkan kesalahan! Kali ini adalah AssertionError. Jadi pengujian kita masih gagal! Mengapa kita mendapatkan kesalahan ini? Karena kita mendefinisikan fungsi yang belum mengembalikan apa pun.
Saat menjalankan pengujian, kita mendapatkan AssertionError karena 1 + 1 tidak sama dengan 2 dengan implementasi kosong kita. Akhirnya, kita dapat membuatnya lolos dengan mengimplementasikan logika yang benar dalam fungsi.

Anda akan melihat titik hijau di pojok sel. Ini menunjukkan bahwa kode Anda valid dan berhasil dijalankan saat Anda menjalankan sel tersebut. Sebelumnya, Anda akan melihat warnanya merah dengan galat saat dijalankan dan menampilkan jenis galat di bawah sel. Fitur ini berguna untuk men-debug kode Anda di DataLab.
Anda kini telah menulis pengujian pertama Anda di Python menggunakan test-driven development. Kerja bagus! Selanjutnya, kita akan memperluas pengujian dan memikirkan cara menangkap potensi kesalahan yang akan menyebabkan fungsi kita gagal atau tidak menghasilkan keluaran yang diharapkan.
Contoh 2: Banyak Kasus Uji
Menguji dengan hanya satu nilai masukan sering kali gagal mengungkap potensi kesalahan. Bug mudah bersembunyi, terutama jika fungsi Anda bergantung pada masukan pengguna yang bervariasi atau logika eksternal. Jadi, bagaimana kita dapat menguji fungsi secara menyeluruh terhadap banyak nilai?
Sebagai contoh, bagaimana jika tipe data yang salah diteruskan ke fungsi? Anda bisa memanfaatkan framework pengujian Python, tetapi mari gunakan Python dasar saja. Pertama, saya akan mendefinisikan daftar kamus masukan untuk mensimulasikan berbagai skenario penggunaan:
test_cases = [
{"num1": 1, "num2": 3, "expected": 4},
{"num1": 1, "num2": "invalid", "expected": "Error: num2 must be a number"},
{"num1": [1,2,3], "num2": 2, "expected": "Error: num1 must be a number"},
{"num1": -1, "num2": 1, "expected": 0},
{"num1": 3.5, "num2": 2.5, "expected": 6.0},
{"num1": 100, "num2": 200, "expected": 300}
]
Kode di atas menampilkan masukan untuk fungsi beserta keluaran yang diharapkan. Namun, kita harus memperbarui pengujian kita untuk mengiterasi kasus-kasus uji ini. Kita dapat memvalidasi setiap kamus dalam daftar dengan menempatkan assert di dalam for loop.
for test in test_cases:
assert add(test["num1"], test["num2"]) == test["expected"]
Karena fungsi belum berubah, apakah kita mengharapkan pengujian ini lulus atau gagal? Dan kesalahan apa yang mungkin terjadi?

Pengujian melempar galat TypeError karena kita belum menangani masukan non-numerik; bagaimana jika sebuah string atau boolean diteruskan alih-alih int? Kita dapat memperbarui fungsi untuk menangkap kasus-kasus ini! Kita dapat mengembalikan pesan khusus pada tipe yang tidak valid dengan memeriksa bahwa variabel masukan bertipe integer atau float.
def add(num1, num2):
if type(num1) is not int and type(num1) is not float:
return "Error: num1 must be a number"
elif type(num2) is not int and type(num2) is not float:
return "Error: num2 must be a number"
else:
return num1 + num2
Saat kita menjalankan ulang pengujian, kita tidak lagi mendapatkan galat, sehingga pengujian kita lulus. Sekarang kita dapat melihat lingkaran hijau menunjukkan bahwa kita telah mengimplementasikan beberapa pengujian yang lulus. Bagus!

Pemikiran Akhir
Dalam tutorial ini, kita membahas dasar-dasar test-driven development di Python menggunakan DataLab. DataLab menyediakan cloud IDE yang memungkinkan Anda menulis dan menjalankan kode Python tanpa perlu pemasangan lokal. Pengujian memvalidasi perilaku kode dan menangkap kesalahan sejak dini. Pernyataan assert memeriksa kondisi dan memunculkan pengecualian saat terjadi kegagalan.
Anda dapat mengeksplorasi lebih banyak kasus uji dan mulai menulis pengujian sendiri di DataLab! Jika Anda ingin mempelajari lebih lanjut tentang pengujian di Python, lihat kursus DataCamp kami - Introduction to Testing in Python.
Amina adalah intern pengembangan konten di Datacamp. Dengan latar belakang Arsitektur dan Pendidikan, ia beralih karier untuk menekuni pengembangan perangkat lunak, dimulai dengan JavaScript; kini ia berfokus pada Python.

