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.

3.1 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:

source venv/bin/activate

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 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):

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:
    export PYTHONPATH=$PYTHONPATH:.
    pytest
    
  • Menjalankan Test yang Gagal Saja: Untuk menghemat waktu, jalankan hanya test yang gagal pada sesi sebelumnya:
    pytest --lf