E2E-TESTING PLAYWRIGHT SOFTWARE-TESTING WEB-DEVELOPMENT FRONTEND QA AUTOMATION CI/CD DEVOPS TESTING JAVASCRIPT TYPESCRIPT QUALITY-ASSURANCE BROWSER-AUTOMATION

End-to-End Testing dengan Playwright: Membangun Aplikasi Web yang Tangguh dan Bebas Bug

⏱️ 12 menit baca
👨‍💻

End-to-End Testing dengan Playwright: Membangun Aplikasi Web yang Tangguh dan Bebas Bug

1. Pendahuluan

Di era digital yang serba cepat ini, aplikasi web adalah tulang punggung banyak bisnis. Dari e-commerce, media sosial, hingga aplikasi enterprise, semua bergantung pada fungsionalitas yang mulus dan bebas bug. Namun, seiring bertambahnya fitur dan kompleksitas, menjaga kualitas dan stabilitas aplikasi menjadi tantangan tersendiri. Di sinilah peran End-to-End (E2E) Testing menjadi sangat krusial.

E2E testing ibarat simulasi pengguna sungguhan yang berinteraksi dengan aplikasi Anda, dari awal hingga akhir, memastikan setiap bagian sistem bekerja sesuai harapan. Ia memberikan keyakinan bahwa user journey yang paling penting tidak akan rusak. Bayangkan, Anda baru saja merilis fitur baru, tapi ternyata ada bug kecil di alur pembayaran yang luput dari perhatian. Fatal, bukan? E2E testing hadir untuk mencegah skenario mimpi buruk seperti ini.

Dalam artikel ini, kita akan menyelami Playwright, sebuah framework E2E testing modern yang dikembangkan oleh Microsoft. Playwright telah menjelma menjadi pilihan favorit para developer berkat kecepatan, keandalan, dan kemampuannya untuk menguji aplikasi di berbagai browser (Chromium, Firefox, WebKit) secara bersamaan. Jika Anda ingin membangun aplikasi web yang tangguh, minim bug, dan memberikan pengalaman pengguna terbaik, maka Playwright adalah alat yang wajib Anda kuasai. Mari kita mulai!

2. Apa Itu End-to-End (E2E) Testing?

📌 E2E Testing adalah simulasi interaksi pengguna secara menyeluruh dengan aplikasi Anda, dari awal hingga akhir, termasuk UI, database, network, dan integrasi dengan layanan eksternal.

Berbeda dengan Unit Testing yang menguji bagian kode terkecil secara terisolasi, atau Integration Testing yang menguji interaksi antar komponen atau modul, E2E Testing berfokus pada keseluruhan alur kerja aplikasi dari perspektif pengguna.

Contoh Skenario E2E Testing:

Tujuan utama E2E testing adalah untuk memvalidasi bahwa semua komponen dalam sistem terintegrasi dan berfungsi dengan benar, memberikan pengalaman pengguna yang diharapkan. Meskipun powerful, E2E testing cenderung lebih lambat dan lebih rentan terhadap “flakiness” (hasil yang tidak konsisten) dibandingkan jenis testing lainnya, sehingga penting untuk menggunakannya secara strategis.

3. Mengapa Playwright? Keunggulan yang Memikat Developer

Dunia E2E testing memiliki banyak tools, seperti Selenium, Cypress, dan TestCafe. Lalu, mengapa Playwright layak menjadi pilihan utama Anda?

💡 Playwright menawarkan kombinasi kecepatan, keandalan, dan fitur canggih yang sulit ditandingi.

Berikut adalah beberapa keunggulan Playwright:

Dengan semua keunggulan ini, Playwright menjadi pilihan yang sangat menarik untuk proyek web modern, baik untuk frontend maupun fullstack developer.

4. Memulai dengan Playwright: Instalasi dan Tes Pertama Anda

Mari kita mulai dengan langkah-langkah praktis untuk menginstal Playwright dan menulis tes E2E pertama Anda.

Persiapan Awal

Pastikan Anda sudah memiliki Node.js (versi 16 atau lebih baru) terinstal di sistem Anda.

Langkah 1: Inisialisasi Proyek

Buka terminal Anda dan buat folder proyek baru, lalu inisialisasi proyek Node.js:

mkdir my-playwright-app
cd my-playwright-app
npm init -y

Langkah 2: Instal Playwright

Instal Playwright melalui npm atau yarn. Perintah ini juga akan mengunduh browser binaries (Chromium, Firefox, WebKit) yang dibutuhkan.

npm init playwright@latest
# Atau jika Anda lebih suka yarn:
# yarn create playwright

Anda akan diminta untuk memilih bahasa (TypeScript atau JavaScript), lokasi folder tes, dan apakah ingin menambahkan GitHub Actions workflow. Pilih yang sesuai dengan preferensi Anda. Untuk contoh ini, kita akan menggunakan TypeScript dan folder tests.

Output instalasi akan terlihat seperti ini:

✔ Do you want to use TypeScript or JavaScript? · TypeScript
✔ Where to put your end-to-end tests? · tests
✔ Add a GitHub Actions workflow? (y/N) · N

Initializing project...
...
Installing Playwright browsers...
...
✔ Playwright project created.

Langkah 3: Menulis Tes Pertama Anda

Playwright membuat contoh tes secara otomatis di tests/example.spec.ts. Mari kita buat tes sederhana untuk mengunjungi sebuah website dan memverifikasi judul halamannya.

Buat file tests/basic.spec.ts dan tambahkan kode berikut:

// tests/basic.spec.ts
import { test, expect } from "@playwright/test";

test("has title", async ({ page }) => {
  // Mengunjungi halaman Google
  await page.goto("https://www.google.com");

  // Mengharapkan judul halaman berisi "Google"
  await expect(page).toHaveTitle(/Google/);
});

test("get started link", async ({ page }) => {
  await page.goto("https://playwright.dev/");

  // Klik link "Get started"
  await page.getByRole("link", { name: "Get started" }).click();

  // Mengharapkan URL baru berisi "/docs/intro"
  await expect(page).toHaveURL(/.*intro/);
});

Langkah 4: Menjalankan Tes Anda

Jalankan tes dari terminal:

npx playwright test

Anda akan melihat output yang menunjukkan tes berjalan di ketiga browser (Chromium, Firefox, WebKit) dan hasilnya:

Running 2 tests using 2 workers
  ✓  tests/basic.spec.ts:5:5 has title (Chromium) (3s)
  ✓  tests/basic.spec.ts:12:5 get started link (Chromium) (1s)
  ✓  tests/basic.spec.ts:5:5 has title (Firefox) (1s)
  ✓  tests/basic.spec.ts:12:5 get started link (Firefox) (1s)
  ✓  tests/basic.spec.ts:5:5 has title (WebKit) (1s)
  ✓  tests/basic.spec.ts:12:5 get started link (WebKit) (1s)

6 passed (6s)

Selamat! Anda baru saja menjalankan tes E2E pertama Anda dengan Playwright.

5. Menulis Tes yang Efektif: Locators, Actions, dan Assertions

Kunci untuk tes E2E yang andal adalah kemampuan untuk berinteraksi dengan elemen UI secara akurat. Playwright menyediakan API yang sangat baik untuk ini.

Locators: Menemukan Elemen dengan Cerdas

Playwright merekomendasikan penggunaan locators yang “user-facing” untuk membuat tes lebih tangguh terhadap perubahan markup HTML.

// Menggunakan role dan nama
await page.getByRole("button", { name: "Submit" }).click();

// Menggunakan teks
await page.getByText("Welcome, John Doe").isVisible();

// Menggunakan label input
await page.getByLabel("Username").fill("myuser");

// Menggunakan placeholder
await page.getByPlaceholder("Email address").fill("test@example.com");

// Menggunakan test ID (direkomendasikan untuk stabilitas)
await page.getByTestId("product-card").click();

// Menggunakan CSS Selector (opsional, jika tidak ada locator yang lebih baik)
await page.locator("#my-id").click();
await page.locator(".my-class").click();

💡 Tips: Selalu prioritaskan getByRole, getByText, getByLabel, getByPlaceholder, atau getByTestId sebelum menggunakan CSS selector biasa. Ini akan membuat tes Anda lebih robust.

Actions: Berinteraksi dengan Aplikasi

Setelah menemukan elemen, Anda bisa berinteraksi dengannya:

await page.fill("#username-input", "john.doe"); // Mengisi input
await page.click('button:has-text("Login")'); // Klik tombol
await page.keyboard.press("Enter"); // Menekan tombol keyboard
await page.selectOption("select#country", "ID"); // Memilih opsi dropdown
await page.check("#remember-me"); // Mencentang checkbox
await page.hover(".product-image"); // Mengarahkan kursor
await page.screenshot({ path: "screenshot.png" }); // Mengambil screenshot

Assertions: Memverifikasi Hasil

Playwright menggunakan library expect yang mirip dengan Jest, dengan banyak matcher yang berguna.

// Memverifikasi teks elemen
await expect(page.locator(".success-message")).toHaveText(
  "Order placed successfully!",
);

// Memverifikasi URL
await expect(page).toHaveURL(/.*dashboard/);

// Memverifikasi judul halaman
await expect(page).toHaveTitle(/Dashboard/);

// Memverifikasi visibilitas elemen
await expect(page.getByRole("button", { name: "Delete" })).toBeVisible();

// Memverifikasi elemen tidak ada
await expect(page.getByText("Error message")).not.toBeVisible();

// Memverifikasi atribut
await expect(page.locator('input[name="email"]')).toHaveAttribute(
  "value",
  "test@example.com",
);

6. Fitur Unggulan Playwright untuk Produktivitas

Playwright tidak hanya tentang menulis tes, tetapi juga menyediakan tools yang meningkatkan produktivitas Anda.

🎯 Playwright Codegen: Rekam dan Hasilkan Kode Tes

Fitur codegen adalah penyelamat waktu. Anda bisa berinteraksi secara manual dengan aplikasi Anda, dan Playwright akan menghasilkan kode tes secara otomatis.

npx playwright codegen https://playwright.dev

Ini akan membuka browser dan jendela Playwright Inspector. Setiap tindakan yang Anda lakukan di browser akan direkam dan ditampilkan sebagai kode Playwright di Inspector. Anda bisa menyalinnya langsung ke file tes Anda.

🎯 Playwright Trace Viewer: Debugging yang Mendalam

Saat tes gagal, Trace Viewer adalah teman terbaik Anda. Ini adalah alat visual yang memungkinkan Anda melihat apa yang terjadi di setiap langkah tes.

Untuk mengaktifkan trace, tambahkan opsi trace: 'on-first-retry' di playwright.config.ts:

// playwright.config.ts
import { defineConfig, devices } from "@playwright/test";

export default defineConfig({
  // ... konfigurasi lainnya
  use: {
    trace: "on-first-retry", // Rekam trace saat tes gagal untuk pertama kalinya
  },
});

Setelah tes gagal, Anda bisa membuka trace dengan:

npx playwright show-trace path/to/trace.zip

Trace Viewer akan menampilkan video eksekusi, screenshot, log, dan bahkan snapshot DOM di setiap langkah, memudahkan Anda menemukan akar masalah.

Parallel Testing

Playwright menjalankan tes secara paralel secara default menggunakan workers. Anda bisa mengonfigurasi jumlah workers di playwright.config.ts untuk mengoptimalkan waktu eksekusi:

// playwright.config.ts
import { defineConfig } from "@playwright/test";

export default defineConfig({
  workers: process.env.CI ? 2 : undefined, // 2 worker di CI, auto-detect di lokal
  // ...
});

7. Best Practices untuk E2E Testing dengan Playwright

Meskipun Playwright sangat membantu, ada beberapa praktik terbaik yang perlu Anda ikuti untuk membuat tes E2E Anda efisien dan stabil.

8. Integrasi dengan CI/CD

Mengintegrasikan Playwright ke dalam pipeline CI/CD adalah langkah penting untuk memastikan kualitas berkelanjutan. Prosesnya relatif mudah.

Pada dasarnya, Anda hanya perlu menjalankan perintah npx playwright test di lingkungan CI/CD Anda.

Contoh GitHub Actions Workflow:

Buat file .github/workflows/playwright.yml:

name: Playwright Tests

on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]

jobs:
  test:
    timeout-minutes: 60
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 18 # Atau versi Node.js yang Anda gunakan
      - name: Install dependencies
        run: npm ci # Atau yarn install
      - name: Install Playwright browsers
        run: npx playwright install --with-deps
      - name: Run Playwright tests
        run: npx playwright test
      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: playwright-report
          path: playwright-report/
          retention-days: 30

Workflow ini akan:

  1. Checkout kode.
  2. Setup Node.js.
  3. Instal dependensi proyek.
  4. Instal browser Playwright.
  5. Menjalankan tes Playwright.
  6. Mengunggah laporan tes Playwright sebagai artifact yang bisa Anda unduh dan lihat (terutama berguna jika ada tes yang gagal).

Dengan ini, setiap kali ada push atau pull request ke branch main, tes E2E Anda akan berjalan secara otomatis, memberikan umpan balik cepat tentang potensi regresi.

Kesimpulan

End-to-End Testing adalah lapisan pertahanan terakhir untuk memastikan aplikasi web Anda berfungsi sebagaimana mestinya dari sudut pandang pengguna. Dengan Playwright, Anda memiliki alat yang powerful, cepat, dan andal untuk mencapai tujuan tersebut. Kemampuan multi-browser, fitur auto-wait, codegen, dan trace viewer menjadikan Playwright pilihan yang sangat menarik bagi developer yang serius tentang kualitas.

Menginvestasikan waktu dalam E2E testing dengan Playwright bukan hanya tentang menemukan bug, tetapi juga tentang membangun kepercayaan diri dalam setiap deployment, mengurangi risiko regresi, dan pada akhirnya, memberikan pengalaman pengguna yang luar biasa. Mulailah mengimplementasikan Playwright dalam proyek Anda hari ini, dan rasakan perbedaannya!

🔗 Baca Juga