Fixtures en setup/teardown
Gebruik fixtures voor gedeelde teststatus en het instellen van resources.
Fixtures en setup/teardown is een gratis Python Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Python Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Python Academy bevat in totaal 4 lessen.
Wat zijn fixtures?
Fixtures zijn functies met de decorator @pytest.fixture die testafhankelijkheden leveren. pytest voegt ze op naam toe.
import pytest
@pytest.fixture
def user():
return {"name": "Alice", "age": 30}
def test_name(user):
assert user["name"] == "Alice"Instellen en opruimen met yield
Geef de fixturewaarde binnen een fixture terug met yield om het instellen (vóór yield) te scheiden van het opruimen (na 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 NoneBereiken van fixtures
Bepaal met scope hoe vaak een fixture wordt gemaakt: function (standaard), class, module, session.
import pytest
@pytest.fixture(scope="module")
def expensive_resource():
print("\nSetup once per module")
yield object()
print("\nTeardown once per module")Fixtures delen via conftest.py
Plaats fixtures in conftest.py om ze zonder imports te delen tussen testbestanden.
# conftest.py
import pytest
@pytest.fixture
def config():
return {"env": "test", "debug": True}
# test_app.py
def test_env(config):
assert config["env"] == "test"Afhankelijkheden van fixtures
Fixtures kunnen afhankelijk zijn van andere fixtures door die als parameters op te geven.
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 == 200autouse-fixtures
Zet autouse=True om een fixture toe te passen op alle tests binnen het bereik zonder die als parameter op te geven.
import pytest
@pytest.fixture(autouse=True)
def reset_env(monkeypatch):
monkeypatch.setenv("ENVIRONMENT", "test")
def test_env():
import os
assert os.environ["ENVIRONMENT"] == "test"De tmp_path-fixture
pytest biedt tmp_path als ingebouwde fixture die per test een nieuwe tijdelijke map levert.
def test_write_file(tmp_path):
f = tmp_path / "hello.txt"
f.write_text("hello")
assert f.read_text() == "hello"De monkeypatch-fixture
Met monkeypatch kun je attributen, omgevingsvariabelen of vermeldingen in woordenboeken tijdelijk vervangen tijdens een test.
def get_env():
import os
return os.environ.get("MODE", "prod")
def test_mode(monkeypatch):
monkeypatch.setenv("MODE", "test")
assert get_env() == "test"De capsys-fixture
capsys vangt uitvoer naar stdout en stderr tijdens tests op.
def greet(name):
print(f"Hello, {name}!")
def test_greet(capsys):
greet("Alice")
out, err = capsys.readouterr()
assert out == "Hello, Alice!\n"Opruimfuncties voor fixtures met request.addfinalizer
Een alternatief voor yield: registreer het opruimen met request.addfinalizer.
import pytest
@pytest.fixture
def resource(request):
r = acquire_resource()
request.addfinalizer(r.release)
return rGeparametriseerde fixtures
Gebruik params in een fixture om alle afhankelijke tests één keer per parameterwaarde uit te voeren.
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() == 1Korte controle
Welk bereik van een fixture zorgt ervoor dat de fixture één keer voor de hele testsessie wordt gemaakt?
Samenvatting
Fixtures bieden via yield herbruikbare voorbereiding en opruiming. Gebruik scope om de levensduur te bepalen, conftest.py om ze te delen en autouse=True voor impliciete toepassing.
Leer Python met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 76
- Lessen
- 320
Veelgestelde vragen
Is de les “Fixtures en setup/teardown” gratis?
Ja — de volledige tekst van “Fixtures en setup/teardown” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Python Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Python Academy bevat in totaal 4 lessen.
Wat leer ik in “Fixtures en setup/teardown”?
Gebruik fixtures voor gedeelde teststatus en het instellen van resources. Je oefent met Python Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Python Academy te beginnen?
Ervaring vooraf is niet nodig. Python Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “Fixtures en setup/teardown”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Python Academy?
Ja. Elke les over Python Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Uw eerste pytest-tests schrijven
- Fixtures en setup/teardown
- Parametriseren en testdekking
- Mocking met unittest.mock