DEV Community

Cover image for Integrating Playwright with CI/CD Pipelines
Aswani Kumar
Aswani Kumar

Posted on

Integrating Playwright with CI/CD Pipelines

Table of Contents

Introduction

Continuous Integration and Continuous Deployment (CI/CD) pipelines are essential for efficiently delivering high-quality software. Integrating Playwright with CI/CD allows you to automate your end-to-end tests, ensuring that every code change is tested before it reaches production. This guide walks you through the process of integrating Playwright with popular CI/CD tools like GitHub Actions, GitLab CI, and Jenkins.

Why Integrate Playwright with CI/CD?

  • Automated Testing: Ensure code changes do not break functionality.
  • Consistency: Run tests in a controlled and repeatable environment.
  • Scalability: Execute tests on multiple browsers and devices concurrently.
  • Feedback Loop: Get immediate feedback on test results for faster debugging.

Step 1: Prepare Your Playwright Tests

Before integrating Playwright into your CI/CD pipeline, ensure your tests are:

  1. Functional: Run them locally using npx playwright test to verify they work.
  2. Configurable: Use environment variables for base URLs, credentials, and other configurations.
  3. Reliable: Minimize flaky tests by leveraging Playwright’s auto-wait features.

Step 2: Integrating Playwright with GitHub Actions

GitHub Actions provides a simple way to set up CI/CD pipelines.

Create a Workflow File:

Save the following as .github/workflows/playwright.yml:

name: Playwright Tests

on:
  push:
    branches:
      - main
  pull_request:

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3

    - name: Set up Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '16'

    - name: Install dependencies
      run: npm ci

    - name: Install Playwright Browsers
      run: npx playwright install --with-deps

    - name: Run Playwright tests
      run: npx playwright test

    - name: Upload Playwright Test Report
      if: failure()
      uses: actions/upload-artifact@v3
      with:
        name: playwright-report
        path: playwright-report
Enter fullscreen mode Exit fullscreen mode

Key Features:

  • Automatically triggers on push or pull request events.
  • Uploads the Playwright HTML report for failed runs.

Step 3: Integrating Playwright with GitLab CI/CD

GitLab CI/CD pipelines are configured using the .gitlab-ci.yml file.

Create a Pipeline Configuration:

Add the following to your .gitlab-ci.yml:

stages:
  - test

test_playwright:
  stage: test
  image: mcr.microsoft.com/playwright:v1.38.0-focal
  script:
    - npm ci
    - npx playwright install --with-deps
    - npx playwright test
  artifacts:
    when: always
    paths:
      - playwright-report/
    expire_in: 1 week
Enter fullscreen mode Exit fullscreen mode

Key Features:

  • Uses the official Playwright Docker image for consistency.
  • Saves test artifacts, including the Playwright report, for easy debugging.

Step 4: Integrating Playwright with Jenkins

Jenkins requires a Jenkinsfile to define your pipeline.

Create a Jenkinsfile:

pipeline {
    agent any

    stages {
        stage('Install Dependencies') {
            steps {
                sh 'npm ci'
                sh 'npx playwright install --with-deps'
            }
        }

        stage('Run Tests') {
            steps {
                sh 'npx playwright test'
            }
        }
    }

    post {
        always {
            archiveArtifacts artifacts: 'playwright-report/**', allowEmptyArchive: true
        }
        failure {
            echo 'Tests failed! Check the report.'
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Key Features:

  • Archives the Playwright report for all runs.
  • Provides custom post-run actions for failures and successes.

Step 5: Running Tests in Parallel

To speed up test execution, configure Playwright to run tests in parallel.

Configuration: Add workers in playwright.config.ts:

import { defineConfig } from '@playwright/test';

export default defineConfig({
  workers: process.env.CI ? 4 : 1,
});
Enter fullscreen mode Exit fullscreen mode

In your CI pipeline, ensure sufficient resources are allocated to support parallelism.

Step 6: Handling Artifacts and Reports

To analyze test results effectively:

  1. Generate HTML Reports: Ensure playwright.config.ts has the HTML reporter enabled:
reporter: [['html', { outputFolder: 'playwright-report' }]]
Enter fullscreen mode Exit fullscreen mode
  1. Upload Reports: Use CI/CD-specific commands to upload reports as artifacts (e.g., actions/upload-artifact for GitHub or artifacts in GitLab).
  2. Visualize Results: Host reports on an S3 bucket or static server for easy access.

Best Practices for Playwright CI/CD Integration

  • Use Docker Images: Leverage official Playwright Docker images for consistent environments.
  • Test Across Browsers: Ensure tests are configured to run on multiple browsers (Chromium, WebKit, Firefox).
  • Run Smoke Tests on Every Commit: Execute a small subset of critical tests for faster feedback.
  • Full Suite for Nightly Builds: Run the complete test suite during off-peak hours.
  • Monitor Flaky Tests: Track and resolve flaky tests to maintain pipeline stability.

Conclusion

Integrating Playwright with CI/CD pipelines enhances your development workflow by ensuring reliable and automated testing. By following this guide, you can set up robust pipelines with tools like GitHub Actions, GitLab CI, and Jenkins. Start integrating Playwright into your CI/CD process today and deliver high-quality software with confidence!

Got questions or tips to share? Drop them in the comments below!

Top comments (1)

Collapse
 
gordon_parks_7959a81e354c profile image
Gordon Parks

Great read! Automating testing with CI/CD tools like GitHub Actions and Jenkins saves so much time. The way you explain the integration process step-by-step makes it so much easier to implement.

Some comments may only be visible to logged-in visitors. Sign in to view all comments.