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