You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
3.2 KiB
Markdown

# 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
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:
```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
```