Fixture e configurazione/teardown
Utilizzi le fixture per condividere lo stato dei test e configurare le risorse.
Fixture e configurazione/teardown è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Python Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Python Academy include 4 lezioni in totale.
Che cosa sono le fixture?
Le fixture sono funzioni decorate con @pytest.fixture che forniscono dipendenze ai test. pytest le inietta in base al nome.
import pytest
@pytest.fixture
def user():
return {"name": "Alice", "age": 30}
def test_name(user):
assert user["name"] == "Alice"Setup e teardown con yield
Esegua yield del valore della fixture per separare il setup (prima di yield) dal teardown (dopo 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 NoneAmbiti delle fixture
Controlli la frequenza di creazione di una fixture con scope: function (predefinito), class, module, session.
import pytest
@pytest.fixture(scope="module")
def expensive_resource():
print("\nSetup once per module")
yield object()
print("\nTeardown once per module")Condivisione delle fixture tramite conftest.py
Inserisca le fixture in conftest.py per condividerle tra i file di test senza importarle.
# conftest.py
import pytest
@pytest.fixture
def config():
return {"env": "test", "debug": True}
# test_app.py
def test_env(config):
assert config["env"] == "test"Dipendenze delle fixture
Le fixture possono dipendere da altre fixture elencandole come parametri.
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 == 200Fixture autouse
Imposti autouse=True per applicare una fixture a tutti i test nell'ambito, senza elencarla come parametro.
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 fornisce tmp_path come fixture integrata che crea una nuova directory temporanea per ogni 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 consente di sostituire temporaneamente attributi, variabili d'ambiente o elementi di un dizionario durante 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 cattura l'output di stdout e stderr durante i test.
def greet(name):
print(f"Hello, {name}!")
def test_greet(capsys):
greet("Alice")
out, err = capsys.readouterr()
assert out == "Hello, Alice!\n"Finalizer delle fixture con request.addfinalizer
Un'alternativa a yield: registri la pulizia con request.addfinalizer.
import pytest
@pytest.fixture
def resource(request):
r = acquire_resource()
request.addfinalizer(r.release)
return rFixture parametrizzate
Utilizzi params in una fixture per eseguire tutti i test dipendenti una volta per ogni valore del parametro.
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() == 1Verifica rapida
Quale ambito della fixture la crea una sola volta per l'intera sessione di test?
Riepilogo
Le fixture forniscono setup e teardown riutilizzabili tramite yield. Utilizzi scope per controllarne la durata, conftest.py per condividerle e autouse=True per applicarle implicitamente.
Domande Frequenti
La lezione «Fixture e configurazione/teardown» è gratuita?
Sì — il testo completo di «Fixture e configurazione/teardown» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Python Academy, passa a CoddyKit PRO. Il corso Python Academy include 4 lezioni in totale.
Cosa imparerò in «Fixture e configurazione/teardown»?
Utilizzi le fixture per condividere lo stato dei test e configurare le risorse. Eserciti Python Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Python Academy?
Non è richiesta alcuna esperienza precedente. Python Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Fixture e configurazione/teardown»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Python Academy?
Sì. Ogni lezione Python Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Scrittura dei primi test con pytest
- Fixture e configurazione/teardown
- Parametrizzazione e copertura dei test
- Mocking con unittest.mock