Architecture de framework & CI/CD · Leçon 3 sur 6

Données de test : fixtures vs factories vs ensemencement

Chaque test a besoin de données sur lesquelles travailler. Il y a quatre façons de les obtenir, et choisir la bonne — et défendre votre choix — est une vraie compétence.

Par Shahriyar · Mis à jour

L'idée, en une ligne

Obtenez les données de votre test depuis la couche la plus basse qui reste fiable, et vérifiez votre résultat à la couche que vous testez réellement. Tout le reste est comment bien le faire.

Les quatre stratégies

▸ try it
import pytest

# Factory: fresh, independent data per test
def make_user(**overrides):
    base = {"email": "t@example.com", "plan": "free", "verified": True}
    return {**base, **overrides}

# Fixture: API-seed a real user, then clean up after
@pytest.fixture
def seeded_user(api_client):
    payload = make_user(plan="pro")
    resp = api_client.post("/users", json=payload)   # seed via the app's API
    user = resp.json()
    yield user                                       # test runs here
    api_client.delete(f"/users/{user['id']}")        # teardown

def test_pro_dashboard(seeded_user, ui):
    ui.login(seeded_user)
    assert ui.dashboard.badge() == "PRO"

Lisez-le de haut en bas : la factory fabrique des données propres, la fixture utilise ces données pour ensemencer un vrai utilisateur via l'API, le test s'exécute au yield, et tout ce qui suit yield nettoie. Ce que vous créez, vous le supprimez.

Avancé — l'heuristique à dire à voix haute

Ensemencez le setup à la couche fiable la plus basse, puis vérifiez à la couche testée. Préférez l'ensemencement via API à l'ensemencement en BD sauf si la vitesse vous y force — l'ensemencement en BD est rapide mais contourne les propres règles de l'app, donc il peut créer des états qui ne pourraient jamais arriver pour un vrai utilisateur.

Basé sur la doc des fixtures pytest et la documentation factory_boy

Toutes les leçons de Architecture de framework & CI/CD

  1. Concevoir un framework de zéro : les couches
  2. Les quatre patterns que les SDET utilisent vraiment
  3. Données de test : fixtures vs factories vs ensemencement
  4. CI avec GitHub Actions : exécuter UI + API à chaque push
  5. Docker & Selenium Grid : des environnements de test reproductibles
  6. Parallèle, réessais & quarantaine des tests instables