E2E Full-Flow Testing dengan Playwright API & k6
Target: E2E full-flow (login → cart → checkout → payment → webhook → logout) dengan real hit API, tanpa mock, dan 100% testable, repeatable, serta bisa dijalankan otomatis. Postman tidak lagi cukup untuk kebutuhan ini; kita butuh pendekatan scriptable yang lebih stabil.
🎯 Overview
Untuk E2E flow panjang yang butuh chaining dan state sharing, ada dua pendekatan yang paling masuk akal:- Playwright API Test (mode API-only, tanpa UI)
- k6 (JS-based E2E + load test runner)
- Scriptable
- Clean & readable
- Real hit API (bukan mock)
- Stateful (bisa share token/login antar step)
1️⃣ Playwright API Test (Recommended)
Kenapa Playwright API Test?
- Bisa chain request berurutan: login → cart → checkout → payment → dsb.
- Bisa simpan token antar step via fixtures/helper.
- Bisa nunggu webhook atau polling order status.
- Bisa dijalankan di CI.
- Bisa hit API lokal, dev, maupun environment lain.
- Test case mudah dibaca dan deterministic.
Struktur Folder (contoh)
Catatan: Di repo ini, kerangka Playwright API sudah diinisialisasi di mstore_test.
Contoh E2E Single Test (Konseptual)
Implementasi aktual di repo bisa sedikit berbeda (prefix/api/v1, fielddata.token, dsb.), tapi pola chaining dan state sharing sama.
2️⃣ k6 – E2E + Load Test Ringan
k6 cocok untuk:- Smoke test E2E
- Load test ringan
- Validasi basic correctness di bawah beban
Contoh Skema k6 (Konseptual)
3️⃣ Kenapa Pendekatan Ini Masuk Akal untuk MStore?
- E2E checkout adalah rantai panjang → butuh script, bukan sekadar collections.
- Perlu state persistence: token login di‑share semua step.
- Perlu simulate payment + webhook → bisa di‑enkapsulasi dalam helper function.
- Perlu assert setelah webhook → polling atau webhook listener.
- Harus jalan lokal (Windsurf/MCP friendly) dan di CI.
- Harus real API hit → no mocks, no abstraction di level E2E.
- Lemah dalam chaining panjang & state sharing.
- Tidak ideal untuk CI/CD E2E yang kompleks.
4️⃣ Rekomendasi Urutan Implementasi
-
Pakai Playwright API Test untuk full E2E
- Fokuskan dulu pada alur: login → cart → checkout → payment → status final.
-
Tambah
simulatePaymentfunction (Xendit/Midtrans)- Panggil sandbox API atau internal simulator.
-
Tambah webhook tester
- Bisa via Knock/local forwarder, atau polling status order sampai berubah.
-
Tambah poll order status setelah webhook/pembayaran
- Implementasikan helper
waitUntilPaid.
- Implementasikan helper
-
Integrasikan ke CI/CD
- Jalankan Playwright E2E di setiap PR / sebelum rilis.
5️⃣ Fact / Opinion / Possibility
- Fact: E2E API dengan flow full checkout membutuhkan chaining + state share; tool non-script sulit melakukan ini dengan rapi.
- Opinion: Playwright API test adalah “sweet spot” — simple tapi powerful, cocok untuk backend modern seperti MStore.
- Possibility: Untuk determinisme penuh, kita bisa membangun MCP payment simulator sendiri → test pembayaran tanpa tergantung sandbox gateway eksternal.
6️⃣ Integrasi dengan Struktur mstore_test
- Playwright API skeleton sudah diinisialisasi di
mstore_test/:playwright.config.tse2e/flows/full_checkout.spec.tse2e/utils/payment.ts
- k6 skeleton sudah ada di:
performance/k6/login_smoke_test.js
- Mapping endpoint aktual backend ke skeleton Playwright.
- Menambah skenario k6 yang mirror alur E2E utama.