3.2 KiB
Panduan Menjalankan Script Testing di BE LCCA Digital Twin
Proyek ini menggunakan Pytest sebagai framework pengujian. Infrastruktur testing terletak di direktori tests/ dan dikonfigurasi untuk menangani sifat asynchronous dari aplikasi FastAPI serta isolasi database.
1. Persiapan Lingkungan (Environment Setup)
Pastikan Anda berada di root direktori proyek dan environment sudah siap.
Opsi A: Menggunakan Virtual Environment (Direkomendasikan)
Aktifkan venv sebelum menjalankan perintah apapun:
python -m venv venv
source venv/bin/activate
pip install poetry
poetry install
Opsi B: Menggunakan Poetry
Jika Anda lebih suka menggunakan Poetry secara langsung tanpa aktivasi manual:
poetry run pytest
2. Menjalankan Pengujian
| Tujuan | Perintah |
|---|---|
| Jalankan Unit Tests | pytest tests/unit |
| Jalankan E2E Tests | pytest tests/e2e |
| Jalankan semua test | pytest |
| Tampilkan statement print | pytest -s |
| Berhenti di kegagalan pertama | pytest -x |
| Jalankan file spesifik | pytest tests/unit/test_example.py |
Catatan: Verbose output (
-v) sudah aktif secara default di konfigurasipyproject.toml.
3. Peringatan Penting (Caution for E2E Tests)
⚠️ PENTING: Saat menjalankan pengujian End-to-End (E2E), pastikan Anda menggunakan Testing Database.
- JANGAN PERNAH menjalankan E2E tests menggunakan database Production atau Development.
- Pengujian E2E seringkali melakukan operasi manipulasi data (create, update, delete) dan pembersihan database secara otomatis yang dapat mengakibatkan kehilangan data permanen.
- Selalu gunakan database terpisah (misalnya PostgreSQL instance khusus testing atau SQLite) yang aman untuk dihapus isinya sewaktu-waktu.
4. Gambaran Infrastruktur Testing
Direktori tests/ berisi beberapa utility script yang memudahkan proses testing:
conftest.py: Berisi fixture global. Sudah terkonfigurasi dengan:client:AsyncClientuntuk simulasi request API ke aplikasi FastAPI Anda.setup_db: Secara otomatis membuat dan menghapus database test (SQLite in-memory) untuk setiap sesi pengujian.
factories.py: Menggunakanfactory-boyuntuk menghasilkan mock data untuk model Anda.database.py: Mengonfigurasi session database untuk kebutuhan pengujian.
5. Menulis Test Pertama Anda
Agar pytest mengenali sebuah file sebagai test, file tersebut harus dinamai dengan format test_*.py atau *_test.py.
Contoh (tests/test_api.py):
import pytest
@pytest.mark.asyncio
async def test_api_status(client):
"""Contoh pengujian menggunakan fixture 'client' dari conftest.py"""
response = await client.get("/")
assert response.status_code == 200
6. Tips Troubleshooting
- Masalah Module Path: Jika Anda menemui error
ModuleNotFoundError, jalankan test dengan menambahkan direktori saat ini kePYTHONPATH:export PYTHONPATH=$PYTHONPATH:. pytest - Menjalankan Test yang Gagal Saja: Untuk menghemat waktu, jalankan hanya test yang gagal pada sesi sebelumnya:
pytest --lf