Playwright: Führen Sie E2E-Tests gegen Ihr Vercel-Deployment mit GitHub-Aktionen durch

Playwright: Führen Sie E2E-Tests gegen Ihr Vercel-Deployment mit GitHub-Aktionen durch

Playwright
Vercel
E2E
Testing
GitHub Actions
Mit Playwright und GitHub Actions ist es einfach, E2E-Tests gegen Ihr Vercel-Deployment durchzuführen. Diese Anleitung zeigt Ihnen, wie Sie es einrichten.

Voraussetzungen

  • Ein GitHub-Konto mit einem Repository
  • Ein Vercel-Konto mit einem Projekt, das mit Ihrem GitHub-Repository verknüpft ist

Playwright einrichten

Zuerst müssen wir Playwright in unserem Projekt einrichten. Wir werden dafür das Playwright Test Framework verwenden.
npm install -D playwright
npx playwright install
Dies installiert Playwright und alle Browser, gegen die wir testen wollen.

Einen Test schreiben

Jetzt können wir unseren ersten Test schreiben. Dazu verwenden wir die Playwright Test API.
import { test, expect } from "@playwright/test";

test("example test", async ({ page }) => {
  await page.goto("https://example.com");
  const title = page.locator("h1");
  await expect(title).toHaveText("Example Domain");
});

GitHub-Actions einrichten

Jetzt müssen wir GitHub Actions einrichten, um unsere Tests auszuführen. Wir werden die [Playwright GitHub Action] (https://playwright.dev/docs/ci-intro) als Ausgangspunkt dafür verwenden.
name: Playwright Tests
on:
  push:
    branches: [main, master]
  pull_request:
    branches: [main, master]
jobs:
  test:
    timeout-minutes: 60
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 18
      - name: Install dependencies
        run: npm ci
      - name: Install Playwright Browsers
        run: npx playwright install --with-deps
      - name: Run Playwright tests
        run: npx playwright test
      - uses: actions/upload-artifact@v3
        if: always()
        with:
          name: playwright-report
          path: playwright-report/
          retention-days: 30
Damit werden unsere Tests bei jedem Push und Pull-Request auf den main- oder master-Zweig ausgeführt.

Warten auf das Deployment von Vercel

Jetzt müssen wir warten, bis das Vercel-Deployment beendet ist, bevor wir unsere Tests ausführen können. Hierfür verwenden wir die "Wait for Vercel Preview" GitHub Action.
Wir fügen einen neuen Job zu unserem Workflow hinzu, der auf das Ende des Vercel Deployments wartet.
test_setup:
  name: Test setup
  runs-on: ubuntu-latest
  outputs:
    preview_url: ${{ steps.waitForVercelPreviewDeployment.outputs.url }}
  steps:
    - name: Wait for Vercel preview deployment to be ready
      uses: patrickedqvist/wait-for-vercel-preview@v1.2.0
      id: waitForVercelPreviewDeployment
      with:
        token: ${{ secrets.GITHUB_TOKEN }}
        max_timeout: 300
Das GITHUB_TOKEN Secret wird automatisch von GitHub erstellt und wir müssen nichts tun, um es einzurichten.

Führen Sie die Tests gegen das Vercel Deployment aus

Jetzt können wir unsere Tests gegen das Vercel Deployment laufen lassen. Wir müssen die URL, die für die Tests verwendet werden soll, in der env Sektion des test Jobs angeben. Beachten Sie auch, dass wir dem test Job einen needs Abschnitt hinzufügen müssen, um sicherzustellen, dass der test_setup Job beendet ist, bevor wir die Tests ausführen.
test:
// focus
  needs: test_setup
  timeout-minutes: 60
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v3
    - uses: actions/setup-node@v3
      with:
        node-version: 18
    - name: Install dependencies
      run: npm ci
    - name: Install Playwright Browsers
      run: npx playwright install --with-deps
    - name: Run Playwright tests
      run: npx playwright test
// focus
      env:
// focus
        URL: ${{ needs.test_setup.outputs.preview_url }}
    - uses: actions/upload-artifact@v3
      if: always()
      with:
        name: playwright-report
        path: playwright-report/
        retention-days: 30

Anpassen der Test-URL

Nun müssen wir die Test-URL so anpassen, dass sie die URL aus dem Vercel-Einsatz verwendet.
  use: {
    /* Base URL to use in actions like `await page.goto('/')`. */
    baseURL: process.env.PLAYWRIGHT_TEST_BASE_URL || "http://localhost:3000",
  },

Anzeigen der Testergebnisse

Nun können wir die Testergebnisse auf der Registerkarte "Actions" unseres GitHub-Repositorys anzeigen.
GitHub-Registerkarte "Aktionen"
Es sollte in etwa so aussehen:
GitHub Actions result

Endgültiger GitHub-Actions-Workflow

name: Playwright Tests
on:
  push:
    branches: [main, master]
  pull_request:
    branches: [main, master]
jobs:
  test_setup:
    name: Test setup
    runs-on: ubuntu-latest
    outputs:
      preview_url: ${{ steps.waitForVercelPreviewDeployment.outputs.url }}
    steps:
      - name: Wait for Vercel preview deployment to be ready
        uses: patrickedqvist/wait-for-vercel-preview@v1.2.0
        id: waitForVercelPreviewDeployment
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          max_timeout: 300
  test:
    needs: test_setup
    name: Playwright tests
    timeout-minutes: 60
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: "18.x"
      - name: Install dependencies
        run: npm ci
      - name: Install Playwright Browsers
        run: npx playwright install --with-deps
      - name: Run Playwright tests
        run: npx playwright test
        env:
          PLAYWRIGHT_TEST_BASE_URL: ${{ needs.test_setup.outputs.preview_url }}
      - uses: actions/upload-artifact@v3
        if: always()
        with:
          name: playwright-report
          path: e2e/playwright-report/
          retention-days: 30
Wenn Sie den endgültigen Code mit einer Next.js-App sehen möchten, können Sie das GitHub-Repository für diesen Blogbeitrag aufrufen.

Abschließende Gedanken

Mit Playwright und GitHub Actions ist es einfach, E2E-Tests gegen Ihre Vercel-Bereitstellung durchzuführen. Auf diese Weise können Sie sicher sein, dass Ihre Änderungen nichts kaputt machen, bevor Sie sie in Ihren Hauptzweig einbinden.

Über mich

Ich bin ein Softwareentwickler aus Deutschland mit mehr als 12 Jahren Erfahrung. Ich interessiere mich leidenschaftlich für Technik und liebe es, neue Dinge zu lernen. Zurzeit arbeite ich als Senior Softwareentwickler bei einer Firma namens "Engel & Völkers Technology".

Folge mir und erfahre, woran ich gerade arbeite:

Haben Sie noch Fragen?Zögern Sie nicht mich zu kontaktieren.