0Pricing
Python Academy · Leçon

Fixtures et préparation/nettoyage

Utilisez des fixtures pour partager l’état des tests et préparer les ressources.

Fixtures et préparation/nettoyage est une leçon Python Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Python Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Python Academy comprend 4 leçons au total.

Que sont les fixtures ?

Les fixtures sont des fonctions décorées avec @pytest.fixture qui fournissent les dépendances des tests. pytest les injecte en fonction de leur nom.

import pytest

@pytest.fixture
def user():
    return {"name": "Alice", "age": 30}

def test_name(user):
    assert user["name"] == "Alice"

Configuration et nettoyage avec yield

Renvoyez la valeur de la fixture avec yield à l’intérieur d’une fixture afin de séparer la configuration (avant yield) du nettoyage (après yield).

import pytest

@pytest.fixture
def db_connection():
    conn = create_connection()  # setup
    yield conn
    conn.close()                # teardown

def test_query(db_connection):
    result = db_connection.query("SELECT 1")
    assert result is not None

Portées des fixtures

Contrôlez la fréquence de création d’une fixture avec scope : function (par défaut), class, module, session.

import pytest

@pytest.fixture(scope="module")
def expensive_resource():
    print("\nSetup once per module")
    yield object()
    print("\nTeardown once per module")

Partager des fixtures avec conftest.py

Placez les fixtures dans conftest.py pour les partager entre les fichiers de test sans importations.

# conftest.py
import pytest

@pytest.fixture
def config():
    return {"env": "test", "debug": True}

# test_app.py
def test_env(config):
    assert config["env"] == "test"

Dépendances entre fixtures

Les fixtures peuvent dépendre d’autres fixtures en les indiquant comme paramètres.

import pytest

@pytest.fixture
def base_url():
    return "http://localhost:8000"

@pytest.fixture
def api_client(base_url):
    return Client(base_url)

def test_get(api_client):
    resp = api_client.get("/health")
    assert resp.status_code == 200

Fixtures autouse

Définissez autouse=True pour appliquer une fixture à tous les tests de sa portée sans l’indiquer comme paramètre.

import pytest

@pytest.fixture(autouse=True)
def reset_env(monkeypatch):
    monkeypatch.setenv("ENVIRONMENT", "test")

def test_env():
    import os
    assert os.environ["ENVIRONMENT"] == "test"

La fixture tmp_path

pytest fournit tmp_path comme fixture intégrée, qui crée un nouveau répertoire temporaire pour chaque test.

def test_write_file(tmp_path):
    f = tmp_path / "hello.txt"
    f.write_text("hello")
    assert f.read_text() == "hello"

La fixture monkeypatch

monkeypatch vous permet de remplacer temporairement des attributs, des variables d’environnement ou des entrées de dictionnaire pendant un test.

def get_env():
    import os
    return os.environ.get("MODE", "prod")

def test_mode(monkeypatch):
    monkeypatch.setenv("MODE", "test")
    assert get_env() == "test"

La fixture capsys

capsys capture la sortie de stdout et stderr pendant les tests.

def greet(name):
    print(f"Hello, {name}!")

def test_greet(capsys):
    greet("Alice")
    out, err = capsys.readouterr()
    assert out == "Hello, Alice!\n"

Finaliseurs de fixtures avec request.addfinalizer

Une alternative à yield : enregistrez le nettoyage avec request.addfinalizer.

import pytest

@pytest.fixture
def resource(request):
    r = acquire_resource()
    request.addfinalizer(r.release)
    return r

Fixtures paramétrées

Utilisez params dans une fixture pour exécuter chaque test dépendant une fois par valeur de paramètre.

import pytest

@pytest.fixture(params=["sqlite", "postgres"])
def db(request):
    return create_db(request.param)

def test_insert(db):
    db.insert({"id": 1})
    assert db.count() == 1

Vérification rapide

Quelle portée de fixture crée la fixture une seule fois pour toute la session de test ?

Récapitulatif

Les fixtures fournissent une préparation et un nettoyage réutilisables via yield. Utilisez scope pour contrôler la durée de vie, conftest.py pour le partage et autouse=True pour une application implicite.

Questions Fréquemment Posées

La leçon « Fixtures et préparation/nettoyage » est-elle gratuite ?

Oui — le texte complet de « Fixtures et préparation/nettoyage » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Python Academy, passe à CoddyKit PRO. Le cours Python Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Fixtures et préparation/nettoyage » ?

Utilisez des fixtures pour partager l’état des tests et préparer les ressources. Tu pratiques Python Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Python Academy ?

Aucune expérience préalable n'est requise. Python Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Fixtures et préparation/nettoyage » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Python Academy ?

Oui. Chaque leçon Python Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Écrire vos premiers tests pytest
  2. Fixtures et préparation/nettoyage
  3. Paramétrage et couverture des tests
  4. Simulation avec unittest.mock
← Retour à Python Academy