Aller au contenu
SDETRole
SDETRole

Glossaire · Automatisation de l’UI

Test de régression visuelle

En anglais : Visual regression testing

Également appelé : tests visuels, test visuel, régression visuelle, comparaison de captures d'écran

Définition

Comparer des captures d'écran de l'interface à des images de référence approuvées pour détecter les changements visuels involontaires (décalages, styles manquants).

Le test de régression visuelle vérifie à quoi ressemble la page plutôt que ce que contient le DOM. La première exécution capture une capture d’écran de référence (baseline) ; les exécutions suivantes prennent une nouvelle capture et la comparent pixel par pixel (ou avec un algorithme perceptuel) à cette référence. Toute différence au-delà d’un seuil fait échouer le test et produit une image de diff qui met en évidence ce qui a changé. Il détecte des problèmes que les assertions fonctionnelles ratent, comme un bouton repoussé hors de l’écran par une modification CSS.

Exemple (Playwright)

import { test, expect } from '@playwright/test';

test('dashboard looks right', async ({ page }) => {
  await page.goto('/dashboard');
  await expect(page).toHaveScreenshot('dashboard.png', {
    fullPage: true,
    mask: [page.getByTestId('last-updated')],
    maxDiffPixels: 100,
  });
});

test('pricing card', async ({ page }) => {
  await page.goto('/pricing');
  await expect(page.getByTestId('pro-plan')).toHaveScreenshot();
});

La première exécution échoue faute de référence et en écrit une. Après un changement de design volontaire, régénérez les références avec :

npx playwright test --update-snapshots

toHaveScreenshot est une web-first assertion : elle reprend la capture jusqu’à ce que deux captures consécutives soient identiques, ce qui évite de comparer une image prise en pleine animation.

Le rendre stable

  • Même environnement pour les références et les exécutions. Les polices et l’anticrénelage diffèrent selon les systèmes d’exploitation, c’est pourquoi Playwright stocke les références par navigateur et par plateforme. Générez-les dans la même image Docker que celle de la CI.
  • Masquez le contenu dynamique. Horodatages, avatars, publicités et graphiques alimentés en direct seront toujours différents.
  • Figez le temps et les données. Utilisez des données de test fixes et, si nécessaire, une horloge simulée.
  • Désactivez les animations. Playwright désactive par défaut les animations CSS pour les captures.
  • Préférez les composants aux pages entières. La capture d’une carte échoue pour une raison ; une page entière, pour vingt.

Erreurs fréquentes

  • Approuver les diffs sans les regarder. Mettre à jour les références en masse transforme la suite en simple tampon d’approbation.
  • Tolérance zéro partout. De minuscules différences de rendu créent du bruit. Fixez un petit seuil, mais pas au point de masquer de vraies régressions.
  • L’utiliser à la place des tests fonctionnels. Une capture peut montrer que le total est au bon endroit, pas qu’il s’agit du bon montant.

Saisissez un terme pour rechercher sur SDETRole.

Recherche plein texte par Pagefind · s’exécute dans votre navigateur Ouvrir la page de recherche →