Perkenalan
Pytest dapat melakukan lebih dari menemukan tes dan melaporkan hasil pernyataan. Seiring bertambahnya Python rangkaian pengujian, logika pengujian berulang dan kode penyiapan bersama membuat pengujian lebih sulit untuk dibaca, di-debug, dan diperluas. Dalam modul ini, Anda akan mempelajari tiga fitur pytest yang membantu menjaga pengujian Python tetap mudah dibaca dan dikelola: parametrisasi, fixture, dan fixture bawaan monkeypatch.
Modul ini mengasumsikan bahwa Anda dapat menulis skrip Python, menjalankan perintah di terminal, dan menjalankan pengujian pytest sederhana di lingkungan virtual dengan Python 3.10 atau yang lebih baru. Jika Anda memerlukan bantuan penyiapan di Windows, lihat Siapkan lingkungan pengembangan Python Anda di Windows. Untuk detail lingkungan virtual, lihat dokumentasi venv Python.
Parametrization dengan @pytest.mark.parametrize menjalankan fungsi pengujian yang sama dengan beberapa set argumen, dan pytest mengumpulkan setiap pemanggilan yang dihasilkan sebagai item pengujiannya sendiri. Fixture adalah fungsi yang terdaftar dengan pytest, biasanya dengan @pytest.fixture, yang diminta oleh pengujian atau fixture lainnya berdasarkan nama. Mekanisme ini dapat mengembalikan nilai yang dapat digunakan kembali dan, ketika diperlukan, menjalankan pembersihan setelah cakupan pengujian atau ruang lingkup perlengkapan selesai. Fikstur monkeypatch untuk sementara mengubah atribut, item kamus, variabel lingkungan, sys.path, atau direktori kerja saat ini, lalu secara otomatis membatalkan perubahan tersebut setelah pengujian atau fikstur yang diminta selesai.
Contoh dalam modul ini adalah pengujian gaya unit, tetapi fitur pytest yang sama berlaku untuk suite pengujian yang lebih besar, baik integrasi maupun fungsional. Contoh menggunakan pernyataan assert Python; pytest memberikan introspeksi asersi sehingga laporan kegagalan menyertakan nilai yang berguna dari ekspresi.
Kapan menggunakan fitur-fitur ini
- Gunakan parametrization saat Anda menemukan diri Anda mengulang input dalam pengujian atau menyalin fungsi pengujian yang hampir duplikat untuk input yang sedikit berbeda. Parametrization memperluas satu definisi pengujian ke dalam banyak item pengujian, sehingga setiap input mendapatkan laporan pass/fail sendiri.
- Gunakan pengaturan saat beberapa pengujian memerlukan penyiapan yang sama (seperti data pengujian, file sementara, atau koneksi database) atau memerlukan pembersihan yang dapat diprediksi setelah dijalankan.
- Gunakan
monkeypatchsaat pengujian perlu mengisolasi kode dari status eksternal—misalnya, variabel lingkungan, direktori kerja saat ini, atau fungsi yang memanggil layanan jarak jauh—tanpa mengubah status tersebut secara permanen.
Anda akan mulai dengan mengganti perulangan dan pengujian hampir duplikat dengan parametrisasi. Kemudian Anda akan menggunakan fixture untuk membagikan pengaturan dan pembersihan, meninjau fixture bawaan seperti tmp_path dan monkeypatch, dan berlatih merefaktor metode pengaturan dan pemecahan gaya xUnit ke dalam sebuah fixture.
Pada akhir modul ini, Anda akan siap untuk menerapkan fitur pytest ini untuk mengurangi pengulangan, memperluas cakupan, dan meningkatkan diagnostik kegagalan di suite pengujian Python Anda.
Untuk informasi selengkapnya, lihat dokumentasi pytest untuk penegasan, membuat parameter pada tes, fixture, dan monkeypatch.