Visual regression testing focuses on the visual aspects of a web application, allowing developers to catch UI changes that could affect user experience. Unlike functional testing, which checks the behavior of the application, visual regression testing ensures that the layout and design remain intact. This is particularly important in projects where multiple developers contribute to the codebase, as changes can inadvertently affect the visual output.

Setting Up Visual Regression Testing with BackstopJS

BackstopJS is a popular open-source tool for visual regression testing. It allows you to capture screenshots of your web pages and compare them against baseline images to identify visual discrepancies.

Step 1: Installation

First, ensure you have Node.js installed on your machine. Then, install BackstopJS globally using npm:

npm install -g backstopjs

Step 2: Initialize BackstopJS

Navigate to your project directory and initialize BackstopJS:

backstop init

This command creates a backstop_data folder containing configuration files and example test scenarios.

Step 3: Configure BackstopJS

Edit the backstop.json file in the backstop_data folder to set up your test scenarios. Below is a sample configuration:

{
  "id": "my_project",
  "viewports": [
    {
      "label": "desktop",
      "width": 1280,
      "height": 800
    },
    {
      "label": "mobile",
      "width": 375,
      "height": 667
    }
  ],
  "scenarios": [
    {
      "label": "Homepage",
      "url": "http://localhost:3000",
      "selectors": ["document"],
      "misMatchThreshold": 0.1
    },
    {
      "label": "About Page",
      "url": "http://localhost:3000/about",
      "selectors": ["document"],
      "misMatchThreshold": 0.1
    }
  ],
  "paths": {
    "bitmaps_reference": "backstop_data/bitmaps_reference",
    "bitmaps_test": "backstop_data/bitmaps_test",
    "engine_scripts": "backstop_data/engine_scripts",
    "html_report": "backstop_data/html_report",
    "ci_report": "backstop_data/ci_report"
  },
  "report": ["browser", "CI"],
  "debug": false
}

Step 4: Capture Baseline Images

To capture the baseline images for your scenarios, run the following command:

backstop reference

This command captures screenshots of the defined scenarios and saves them in the bitmaps_reference folder.

Step 5: Test for Visual Changes

After making changes to your HTML or CSS, run the following command to test for visual regressions:

backstop test

BackstopJS will compare the current screenshots with the baseline images and report any discrepancies. If any visual changes are detected, they will be highlighted in the test report.

Step 6: Review Test Results

After running the tests, you can review the results by opening the HTML report:

backstop openReport

This command opens a browser window displaying the results, where you can see the differences between the baseline and test images.

Implementing Visual Regression Testing with Percy

Percy is a cloud-based visual testing tool that integrates seamlessly with your CI/CD pipeline. It provides an intuitive interface for visual regression testing and allows for easy collaboration among team members.

Step 1: Sign Up for Percy

Create an account at Percy and set up a new project.

Step 2: Install Percy CLI

Install the Percy CLI in your project:

npm install --save-dev @percy/cli

Step 3: Configure Percy

Add a script to your package.json to run Percy:

"scripts": {
  "test": "percy exec -- <your-test-command>"
}

Replace <your-test-command> with the command you use to run your tests (e.g., npm test).

Step 4: Capture Screenshots

In your test files, use Percy to capture screenshots. Below is an example using Jest:

import { percySnapshot } from '@percy/jest';

test('Homepage visual regression', async () => {
  await page.goto('http://localhost:3000');
  await percySnapshot('Homepage');
});

Step 5: Run Your Tests

Run your tests with the following command:

npm run test

Percy will capture screenshots and upload them to your project dashboard for comparison.

Step 6: Review Changes

Log in to your Percy dashboard to review the visual changes. Percy will highlight any differences, allowing you to accept or reject changes directly from the interface.

Best Practices for Visual Regression Testing

Best PracticeDescription
Use Consistent ViewportsAlways test against the same viewport sizes to ensure consistency in visual comparisons.
Keep Baseline Images UpdatedRegularly update baseline images when intentional changes are made to the UI.
Integrate with CI/CDAutomate visual regression tests in your CI/CD pipeline to catch visual bugs early in the development process.
Limit MisMatch ThresholdSet a reasonable misMatchThreshold to avoid false positives while still catching significant changes.

Conclusion

Visual regression testing is a vital part of maintaining a consistent user interface in web applications. By implementing tools like BackstopJS and Percy, developers can ensure that their HTML layouts remain visually intact across updates. This proactive approach not only enhances user experience but also fosters collaboration among team members.

Learn more with useful resources: