↓Lewati ke konten utama
  1. Pengujian & Kualitas/

Dasar pytest: Test, Fixture, dan Assertion yang Jelas

·293 kata·2 menit·
Python pytest Testing Unit Test
Ifarra
Penulis
Ifarra
Hey gunner in the rain
Daftar isi

pytest adalah test runner Python yang banyak dipakai karena sintaksnya sederhana dan laporan kegagalannya jelas. Test dapat berupa fungsi biasa dengan nama yang diawali test_; assertion memakai pernyataan assert bawaan Python.

pytest menemukan test, menyiapkan fixture, menjalankan assertion, lalu membersihkan resource
Fixture membuat setup dan teardown lebih terarah.

Pasang pytest dan tulis test pertama
#

Buat virtual environment dan pasang pytest:

python -m venv .venv
source .venv/bin/activate  # Windows: .venv\\Scripts\\activate
python -m pip install pytest

Misalnya discount.py berisi fungsi pemberian diskon:

def apply_discount(price, percent):
    if price < 0 or not 0 <= percent <= 100:
        raise ValueError("invalid price or discount")
    return price * (1 - percent / 100)

Buat file test_discount.py untuk menguji harga normal dan input yang harus ditolak:

import pytest
from discount import apply_discount

def test_menerapkan_diskon_persen():
    assert apply_discount(80, 25) == 60

def test_menolak_diskon_di_atas_seratus_persen():
    with pytest.raises(ValueError, match="invalid price"):
        apply_discount(80, 120)

Jalankan pytest dari direktori utama proyek. pytest menemukan file dan fungsi test lewat konvensi nama.

Gunakan fixture untuk resource bersama
#

Fixture menyediakan nilai atau resource yang dibutuhkan test, misalnya direktori sementara, client aplikasi, atau sesi database. Letakkan setup dekat dengan test dan pastikan cleanup dilakukan jika resource perlu dilepas.

import pytest

@pytest.fixture
def keranjang():
    return {"items": [], "total": 0}

def test_keranjang_baru_kosong(keranjang):
    assert keranjang["items"] == []
    assert keranjang["total"] == 0

pytest membuat fixture untuk test lalu memasukkannya berdasarkan nama parameter. Fixture seharusnya memperjelas dependensi, bukan menyembunyikan setup rumit di balik rangkaian fungsi yang tidak terlihat.

Buat kegagalan mudah dipahami
#

Uji perilaku yang penting dan pilih nama test yang menjelaskannya. Pisahkan ekspektasi yang tidak berhubungan bila itu membuat penyebab kegagalan lebih jelas. Gunakan pytest.raises untuk exception yang diharapkan.

Hindari state mutable yang dipakai bersama. Fixture dengan scope fungsi adalah default dan memberi state baru bagi tiap test. Untuk layanan eksternal, gunakan fake atau layanan test, bukan kredensial developer atau koneksi jaringan pribadi.

Terkait

Testing Pyramid: Unit Test, Integration Test, dan End-to-End Test
·334 kata·2 menit
Testing Kualitas Perangkat Lunak Unit Test Integration Test
Panduan praktis testing pyramid beserta contoh cakupan unit test, integration test, dan end-to-end test.
Python Cheat Sheet
·1060 kata·5 menit
Python Programming Notes
Catatan tentang apa pun yang perlu Anda ketahui untuk mulai coding dengan Python
Two Sum - Leetcode
·746 kata·4 menit
Python Leetcode Leetcode-Easy Notes
Cara menyelesaikan masalah Two Sum serta penjelasannya