# 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: ```bash source venv/bin/activate ``` ### **Opsi B: Menggunakan Poetry** Jika Anda lebih suka menggunakan Poetry secara langsung tanpa aktivasi manual: ```bash 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 konfigurasi `pyproject.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`: `AsyncClient` untuk 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`**: Menggunakan `factory-boy` untuk 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`):** ```python 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 ke `PYTHONPATH`: ```bash export PYTHONPATH=$PYTHONPATH:. pytest ``` * **Menjalankan Test yang Gagal Saja**: Untuk menghemat waktu, jalankan hanya test yang gagal pada sesi sebelumnya: ```bash pytest --lf ```