Pytest Fixtures
Pytest fixtures for test setup and teardown.
Basic Fixtures
import pytest
Simple fixture
@pytest.fixture
def sample_data():
return {"name": "John", "age": 30}
Use fixture
def test_data(sample_data):
assert sample_data["name"] == "John"
Fixture Scopes
Function scope (default)
@pytest.fixture(scope="function")
def func_fixture():
return "data"
Class scope
@pytest.fixture(scope="class")
def class_fixture():
return "shared"
Module scope
@pytest.fixture(scope="module")
def module_fixture():
return "once per module"
Session scope
@pytest.fixture(scope="session")
def session_fixture():
return "once per session"
Fixture Teardown
Using yield
@pytest.fixture
def database():
db = create_database()
yield db
db.close()
Using request.addfinalizer
@pytest.fixture
def resource(request):
r = acquire_resource()
request.addfinalizer(lambda: r.release())
return r
Parametrized Fixtures
Parametrize fixture
@pytest.fixture(params=[1, 2, 3])
def number(request):
return request.param
def test_number(number):
assert number > 0
Parametrize test
@pytest.mark.parametrize("input,expected", [
(1, 2),
(2, 4),
(3, 6)
])
def test_double(input, expected):
assert input * 2 == expected