Proyek Akhir
Buat suite UI + API untuk TokoQA, KlinikQA, atau PerpusQA dengan struktur project kerja, lengkap dengan CI dan laporan.
Proyek akhir menggabungkan semua yang sudah kamu pelajari menjadi satu suite automation, sekaligus portofolio untuk perekrut: suite, CI, dan laporannya.
Proyek akhir ini seperti mengerjakan test plan untuk fitur baru dari nol: tentukan cakupan, tulis test, jalankan di CI, lalu laporkan hasilnya. Hasil akhirnya bisa kamu tunjukkan saat melamar kerja.
Brief proyek akhir
Buat suite automation untuk salah satu proyek pasangan UI + API di playground: TokoQA, KlinikQA, atau PerpusQA. Pakai bahasa pilihanmu (atau dua-duanya), dan penuhi syarat berikut. Contoh di bawah memakai TokoQA, tapi syaratnya berlaku untuk ketiganya:
| # | Syarat | Modul terkait |
|---|---|---|
| 1 | Struktur rapi: pages/, tests/, data/, konfigurasi | 2, 10 |
| 2 | Page Object untuk halaman utama proyekmu (TokoQA: Login, Shop, Checkout) | 10 |
| 3 | Minimal 1 test smoke end-to-end: login → belanja → checkout sukses | 7, 17 |
| 4 | Test negatif: login gagal, validasi checkout (data-driven dari JSON) | 7, 11 |
| 5 | API test: produk, login, keranjang, ditambah contract test terhadap API Spec proyekmu | 13 |
| 6 | Minimal 1 hybrid test (login atau siapkan data lewat API) | 13 |
| 7 | Minimal 1 test dengan network mocking (kondisi error) | 13 |
| 8 | Username dan password di .env, bukan di kode | 11 |
| 9 | Jalan di CI (GitHub Actions) dan menyimpan report | 15 |
| 10 | README yang menjelaskan cara menjalankan dan alasan di balik pilihanmu | 17 |
Rencana test (test plan) singkat
Sebelum menulis kode, tulis daftar skenario dengan prioritasnya: P1 wajib, P3 boleh menyusul.
| Skenario | Level | Prioritas | Tag |
|---|---|---|---|
| Login berhasil | UI | P1 | smoke |
| Login gagal (password salah, akun terkunci, form kosong) | UI | P1 | regression |
| Cari & filter produk | UI | P2 | regression |
| Belanja sampai pesanan berhasil | UI | P1 | smoke |
| Produk stok habis tidak bisa dibeli | UI | P2 | regression |
| Hapus item dari keranjang | UI | P2 | regression |
| Validasi form checkout (data JSON) | UI | P2 | regression |
| Kontrak API produk (schema) | API | P1 | smoke |
| Keranjang butuh token, stok tidak cukup = 409 | API | P2 | regression |
| Bypass login dengan token | Hybrid | P2 | regression |
| Tampilan saat API produk error 500 | UI + mock | P3 | regression |
Contoh implementasi: alur belanja end-to-end
Contoh jawaban untuk syarat nomor 3 dan beberapa skenario regression, memakai Page Object dan fixture:
Memuat tests/academy/test_m17_capstone.py…
uv run pytest -m smoke -vMemuat tests/academy/m17-capstone.spec.ts…
npx playwright test --grep @smokePage object (Modul 10), data JSON (Modul 11), API dan hybrid (Modul 13), serta workflow CI (Modul 15) sudah kamu latih. Tugasmu merangkai dan mengembangkannya, bukan menulis dari nol.
Mulai dari repository baru dengan struktur kerja
Selama belajar, contoh test ada di tests/academy/ dan diberi nama per modul. Untuk proyek akhir, buat repository baru dengan struktur seperti di kantor (lihat perbandingannya di Persiapan). Satu repository, satu bahasa, dan test dikelompokkan per fitur.
mkdir tokoqa-e2e
cd tokoqa-e2e
uv init --no-package --python 3.12
uv add pytest pytest-playwright python-dotenv pydantic
uv run playwright install chromium
mkdir pages, api, data, tests\e2e\auth, tests\e2e\checkout, tests\apinpm init playwright@latest tokoqa-e2e
cd tokoqa-e2e
npm install -D zod
mkdir src\pages, src\fixtures, src\api, test-data, tests\e2e\auth, tests\e2e\checkout, tests\apiLalu pindahkan dan sesuaikan isinya:
| Dari project latihanmu | Ke repository proyek akhir |
|---|---|
pages/* | pages/ (Python) atau src/pages/ (TypeScript) |
conftest.py / fixtures.ts | tests/conftest.py / src/fixtures/index.ts |
test_m10_pom.py, test_m17_capstone.py | tests/e2e/auth/test_login.py, tests/e2e/checkout/test_checkout.py |
test_m13_case_studies.py | dipecah: tests/api/test_addresses.py, tests/api/test_orders.py, dst. |
URL https://playground.aminhamzah.com ditulis di config | dibaca dari BASE_URL di .env |
Anggap TokoQA sebagai aplikasi milik tim lain yang sudah berjalan, seperti server staging di kantor. Isi BASE_URL=https://playground.aminhamzah.com di .env repository barumu.
Checklist review test
Pakai checklist ini sebelum membuka Pull Request, dan saat memeriksa test buatan orang lain (atau buatan AI):
Misi: Checklist review test
Lebih jauh (opsional)Trik komunitas
- Cek aksesibilitas otomatis:
@axe-core/playwright(TypeScript) danaxe-playwright-python(Python) memeriksa apakah halaman melanggar aturan WCAG. Cukup satu test kecil, tapi nilai tambahnya besar di portofolio. - Visual regression: TypeScript punya
expect(page).toHaveScreenshot()bawaan. Python belum punya fitur bawaan, jadi biasanya memakai plugin komunitas dari PyPI. - Laporan yang bisa dibagikan: taruh HTML report di GitHub Pages dan tempel tautannya di README.
- Tunjukkan cara kerjamu dengan AI: simpan
specs/*.mdhasil agent planner di repository. Perekrut bisa melihat cara kamu merencanakan test, bukan hanya hasil akhirnya.
Membawa automation ke dunia kerja
Portofolio yang menarik perhatian perekrut:
- Repository publik dengan README yang jelas: tujuan, struktur, cara menjalankan, dan screenshot report.
- Badge CI hijau di README.
- Riwayat commit yang rapi dengan pesan yang jelas (bukan "update", "fix lagi", "asdf").
- Penjelasan alasan di balik pilihanmu: kenapa memilih locator tertentu, kenapa login lewat API, dan apa yang sengaja tidak diotomasi.
Kebiasaan QA automation yang hebat:
- Kenali produknya dulu. Automation terbaik datang dari QA yang paham cara bisnisnya berjalan dan bagian mana yang paling berisiko.
- Ngobrol dengan developer. Minta
data-testidatau perbaikan aksesibilitas, dan ikut membaca PR mereka. - Rawat suite seperti merawat produk. Hapus test yang sudah tidak berguna, dan segera perbaiki test yang flaky.
- Ukur hal yang penting: lama test berjalan, seberapa sering flaky, dan berapa bug yang tertangkap sebelum sampai ke pengguna.
- Terus belajar: visual testing, accessibility testing (
axe), performance, dan contract testing.
Pertanyaan interview yang sering muncul
- "Kenapa Playwright, bukan Selenium?" Ada auto-wait, context yang ringan dan terpisah, mendukung banyak browser termasuk WebKit, punya alat debug (trace), dan sudah bisa API testing tanpa tambahan.
- "Bagaimana cara menangani flaky test?" Cari sumber masalahnya: ganti sleep dengan web-first assertion, perbaiki locator, buat test yang bisa berdiri sendiri, dan siapkan data lewat API. Retry hanya jadi jaring pengaman, dan test yang flaky tetap dicatat untuk diperbaiki.
- "Apa itu Page Object Model, dan apa kekurangannya?" POM memisahkan locator dan aksi ke dalam class. Kekurangannya: bisa terasa berlebihan untuk suite kecil, dan bisa jadi satu class raksasa kalau tidak dijaga.
- "Kapan sebaiknya TIDAK diotomasi?" Tampilan yang masih sering berubah, exploratory testing, penilaian pengalaman pengguna, dan test yang cuma dipakai sekali.
- "Bagaimana cara menjalankan test di CI?" Pakai workflow GitHub Actions: install dependency dan browser, ambil password dari secrets, lalu simpan report dan trace sebagai artefak.
- "Bagaimana mempercepat suite yang lambat?" Jalankan paralel atau sharding, login lewat API atau storage state, pindahkan pengecekan yang tidak butuh tampilan ke API test, dan mock layanan pihak ketiga.
Latihan
Kerjakan di repository barumu sendiri. Jawaban berisi suite referensi dari project contoh Academy.
Pilih proyek dan susun repository-nya
- Pilih salah satu: TokoQA, KlinikQA, atau PerpusQA.
- Buat repository baru dengan struktur
pages/,tests/e2e/,tests/api/,data/, dan file konfigurasi. - Simpan URL server di
.envsebagaiBASE_URL.
Hasilrepository kosong yang rapi dan siap diisi test
Lihat bagian Mulai dari repository baru dengan struktur kerja di atas untuk perintah dan susunan foldernya. Yang penting: satu repository untuk satu bahasa, test dikelompokkan per fitur, dan tidak ada password di kode.
Suite UI untuk proyek pilihanmu
- Buat page object untuk halaman utama proyekmu.
- Tulis minimal 1 test smoke (alur utama sampai berhasil) dan 2 test negatif.
- Kalau proyekmu punya dua peran, tulis satu test yang melibatkan keduanya.
Hasilsemua test lulus di 3 browser
Contoh suite UI referensi untuk KlinikQA dan PerpusQA:
Memuat tests/proyek/test_klinik_ui.py…
Memuat tests/proyek/klinik-ui.spec.ts…
Memuat tests/proyek/test_perpus_ui.py…
Memuat tests/proyek/perpus-ui.spec.ts…
Untuk TokoQA, contohnya ada di file proyek akhir di atas.
Suite API untuk proyek pilihanmu
- Tulis test API untuk login atau autentikasi proyekmu (misalnya token yang kedaluwarsa atau sudah logout).
- Tulis test CRUD atau alur utama lewat API.
- Tulis minimal 2 test jalur gagal (validasi 422, tanpa izin 401 atau 403, data bentrok 409).
- Tambahkan contract test: cocokkan respons asli dengan kontrak di API Spec memakai helper
utils/kontrak.
Hasilsetiap status penting punya minimal satu test, dan responsnya lolos pengecekan kontrak
Contoh suite API referensi:
Memuat tests/proyek/test_klinik_api.py…
Memuat tests/proyek/klinik-api.spec.ts…
Memuat tests/proyek/test_perpus_api.py…
Memuat tests/proyek/perpus-api.spec.ts…
Memuat tests/proyek/test_kontrak_api.py…
Memuat tests/proyek/kontrak-api.spec.ts…
Selesaikan, periksa, lalu bagikan
- Penuhi 10 syarat di brief proyek.
- Jalankan seluruh suite 3 kali berturut-turut di 3 browser. Pastikan tidak ada yang flaky.
- Periksa test-mu dengan checklist review di atas, lalu perbaiki temuannya.
- Push ke GitHub dengan CI hijau dan README yang lengkap, lalu bagikan.
Hasilrepository publik dengan CI hijau, report, dan README
README yang baik menjawab: proyek apa yang diuji, cara menjalankan test (lokal dan CI), struktur folder, alasan pemilihan locator dan cara login, serta apa yang sengaja tidak diotomasi. Tambahkan badge CI dan tautan ke report.
Selesai
Kamu sudah melewati semuanya, dari "apa itu automation?" sampai suite lengkap dengan Page Object, API dan hybrid testing, CI/CD, dan testing dibantu AI. Lanjutkan di project sungguhan, baca dokumentasi resmi di playwright.dev, dan bagikan ilmumu.