Automatisation UI : Selenium + Playwright + pytest · Leçon 4 sur 6

pytest en profondeur : fixtures, conftest, parametrize & marqueurs

pytest est le moteur qui exécute vos tests dans les deux stacks. Quatre fonctionnalités font l'essentiel du gros du travail — apprenez-les et vous avez fait le plus gros du chemin.

Par Shahriyar · Mis à jour

L'idée, en une ligne

pytest vous laisse préparer les choses une fois, exécuter un test sur plusieurs entrées, et étiqueter les tests pour choisir lesquels s'exécutent.

1. Fixtures — setup et nettoyage

Une fixture prépare quelque chose dont un test a besoin (comme un navigateur ouvert) et le nettoie après. Décorez une fonction avec @pytest.fixture, puis tout test qui la nomme en paramètre reçoit sa valeur.

Contrôlez la durée de vie d'une fixture avec scope : function (par défaut), class, module, package, ou session. Un navigateur connecté est une fixture session ou module naturelle — configurez-le une fois, réutilisez-le.

2. conftest.py — l'étagère partagée

Mettez les fixtures partagées dans un fichier appelé conftest.py. Aucun import nécessaire : chaque test de ce dossier et en dessous peut juste les demander par leur nom.

3. parametrize — un test, plusieurs entrées

@pytest.mark.parametrize exécute le même corps de test sur une liste d'entrées, chacune rapportée comme son propre cas. Enveloppez une seule ligne dans pytest.param(..., marks=..., id=...) pour lui donner un nom ou une étiquette.

4. Marqueurs — des étiquettes filtrables

Les marqueurs étiquettent les tests — @pytest.mark.smoke, @pytest.mark.regression — pour que vous puissiez n'exécuter qu'un groupe avec pytest -m smoke. Enregistrez-les dans pyproject.toml et ajoutez --strict-markers pour qu'une faute de frappe échoue bruyamment au lieu de sauter silencieusement.

Voyez-le à l'œuvre

▸ try it
# conftest.py — a shared fixture, no import needed below
import pytest
from playwright.sync_api import sync_playwright

@pytest.fixture(scope="session")
def browser():
    with sync_playwright() as p:
        b = p.chromium.launch()
        yield b        # tests run here
        b.close()      # cleanup after the whole session

# test_search.py
import pytest

@pytest.mark.smoke
@pytest.mark.parametrize("term,hits", [
    ("backpack", 1),
    ("jacket", 1),
    pytest.param("", 6, id="empty-shows-all"),
])
def test_search_counts(term, hits):
    assert search(term) == hits   # runs 3 named cases

# pyproject.toml
# [tool.pytest.ini_options]
# markers = ["smoke: fast critical-path checks"]

Lisez-le de haut en bas : la fixture browser ouvre Chromium une fois et le ferme à la fin. Le test s'exécute trois fois, une par ligne d'entrée, et l'étiquette smoke vous laisse l'isoler plus tard.

Basé sur la doc officielle pytest — Fixtures, Parametrize, Markers

Toutes les leçons de Automatisation UI : Selenium + Playwright + pytest

  1. Sélecteurs Selenium : trouver l'élément que vous voulez
  2. Attentes, actions & frames — tuer l'instabilité à la source
  3. Playwright : attente automatique, sélecteurs & tracing
  4. pytest en profondeur : fixtures, conftest, parametrize & marqueurs
  5. Le Page Object Model, fait correctement
  6. Les cas difficiles : éléments dynamiques, iframes, uploads & simulation réseau