Project ini merangkum skenario demonstrasi Continuous Integration (CI) untuk kelas Software Quality Assurance (SQA). Demo ini dirancang untuk menunjukkan transisi dari pengujian unit dasar hingga pengujian API menggunakan ekosistem Python modern.
- Memahami CI/CD Dasar: Mengotomatiskan pengujian perangkat lunak menggunakan GitHub Actions setiap kali ada Pull Request.
- Pengenalan uv: Menggunakan uv (oleh Astral) sebagai package manager Python berkinerja tinggi untuk memangkas waktu setup environment di CI.
- Penerapan Konsep SQA:
- Positive & Negative Testing
- Data-Driven Testing (menggunakan
@pytest.mark.parametrize) - Environment Parity (kesamaan lingkungan lokal dan CI menggunakan Docker)
- Integration Testing & API Testing
- Bahasa: Python 3.12+
- Package Manager: uv
- Testing Framework: pytest, pytest-cov, httpx (untuk API test)
- Web Framework: FastAPI & Pydantic
- Database: MySQL (dengan pymysql)
- Infrastruktur: GitHub Actions & Docker Compose
Sebelum meng-clone dan menjalankan project ini, pastikan perangkat Anda sudah memiliki:
- Git — untuk meng-clone repository. Download Git
- Python 3.12+ — bahasa utama yang digunakan project ini. Download Python
- uv — package manager Python yang dipakai untuk mengelola dependensi & virtual environment.
# macOS / Linux curl -LsSf https://astral.sh/uv/install.sh | sh # Windows (PowerShell) powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- Docker & Docker Compose — untuk menjalankan database MySQL secara lokal (dibutuhkan mulai Issue #3). Download Docker Desktop
- Editor/IDE — disarankan menggunakan Antigravity IDE untuk pengembangan project ini.
Verifikasi instalasi dengan menjalankan:
git --version
python --version
uv --version
docker --version
docker compose version-
Clone repository
git clone https://github.com/unikom-codelabs/challenge-sqa-14.git cd challenge-sqa-14 -
Pastikan versi Python sesuai
Project ini menggunakan file
.python-version(Python 3.12). Jika menggunakanuv, versi Python yang sesuai akan otomatis diunduh/dipakai saat sinkronisasi dependensi. -
Buat dan aktifkan virtual environment
uv venv
Aktifkan virtual environment yang baru dibuat:
# macOS / Linux source .venv/bin/activate # Windows (PowerShell) .venv\Scripts\activate
-
Sinkronisasi dependensi project
Perintah ini akan menginstal seluruh dependensi (termasuk dependensi development seperti
pytest) berdasarkanpyproject.tomldanuv.lockke dalam virtual environment yang sudah dibuat.uv sync --dev
-
(Opsional) Jalankan database MySQL lokal
Dibutuhkan jika sedang mengerjakan/menguji fitur dari Issue #3 (Integrasi MySQL) dan seterusnya.
docker-compose up -d
docker-compose.ymljuga sudah menyertakan phpMyAdmin sebagai antarmuka web untuk mengelola database MySQL secara visual. Setelah container berjalan, buka:http://localhost:8080Login menggunakan:
- Username:
root - Password:
root
- Username:
-
Jalankan pengujian untuk memastikan setup berhasil
uv run pytest test_main.py -v --cov=main
Jika seluruh test PASSED, setup project sudah berhasil dan siap untuk dikembangkan.
-
(Opsional) Jalankan server FastAPI
Dibutuhkan jika sedang mengerjakan/menguji fitur dari Issue #4 (RESTful API) dan seterusnya.
uv run fastapi dev main.py
Dokumentasi API interaktif (Swagger UI) dapat diakses melalui:
http://localhost:8000/docs -
Mulai mengembangkan fitur
Ikuti alur kerja standar project ini: issue -> branch -> implementasi -> commit -> pull request -> ci -> merge. Lihat detail masing-masing fitur di folder
issues/.git checkout -b feature/issue-<nomor>-<nama-fitur>
Proyek ini dibangun secara bertahap melalui Pull Request untuk mensimulasikan lingkungan kerja nyata.
- Fitur: Fungsi validasi password sederhana (Minimal 8 karakter, 1 huruf kapital, 1 angka).
- Fokus SQA: Menulis Unit Test dasar untuk memisahkan aturan-aturan validasi menjadi skenario yang terisolasi.
- Fitur: Menambahkan fungsi validasi format email menggunakan Regular Expression (Regex).
- Fokus SQA: Equivalence Partitioning untuk membedakan kelompok format email yang valid (domain benar) dan tidak valid (kurang karakter
@, dsb).
- Fitur: Mengamankan password menggunakan algoritma hashing sebelum disimpan.
- Fokus SQA: Memastikan fungsionalitas enkripsi berjalan (password asli ≠ hash) dan menguji fungsi verifikasi kecocokan password.
- Fitur: Menyimpan data kredensial pengguna ke dalam database MySQL.
- Fokus SQA:
- Integration Testing: Menggunakan Fixture di pytest untuk Setup (membuat tabel) dan Teardown (menghapus tabel).
- Environment Parity: Menggunakan
docker-compose.ymldi lokal dan Service Containers di GitHub Actions agar environment database selalu konsisten.
- Fitur: Mengekspos fungsi-fungsi sebelumnya menjadi endpoint
POST /register. - Fokus SQA:
- API Testing: Mensimulasikan request HTTP menggunakan TestClient.
- Status Code Validation:
- 201 Created → sukses
- 400 Bad Request → duplikasi data
- 422 Unprocessable Entity → kegagalan validasi (Pydantic)
uv init
uv add "fastapi[standard]" pymysql passlib
uv add --dev pytest pytest-cov httpxdocker-compose up -d- MySQL dapat diakses di
localhost:3306 - phpMyAdmin dapat diakses melalui browser di
http://localhost:8080
uv run pytest test_main.py -v --cov=mainuv run fastapi dev main.pyDokumentasi API (Swagger UI) dapat diakses di http://localhost:8000/docs.