Fixtures e configuração/desmontagem
Use fixtures para compartilhar o estado dos testes e configurar recursos.
Fixtures e configuração/desmontagem é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.
O que são fixtures?
Fixtures são funções decoradas com @pytest.fixture que fornecem dependências aos testes. pytest as injeta pelo nome.
import pytest
@pytest.fixture
def user():
return {"name": "Alice", "age": 30}
def test_name(user):
assert user["name"] == "Alice"Configuração e desmontagem com yield
Produza o valor da fixture dentro de uma fixture para separar a configuração (antes de yield) da desmontagem (depois de 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 NoneEscopos de fixtures
Controle com que frequência uma fixture é criada usando scope: function (padrão), class, module, session.
import pytest
@pytest.fixture(scope="module")
def expensive_resource():
print("\nSetup once per module")
yield object()
print("\nTeardown once per module")Compartilhamento de fixtures via conftest.py
Coloque as fixtures em conftest.py para compartilhá-las entre arquivos de teste sem importações.
# conftest.py
import pytest
@pytest.fixture
def config():
return {"env": "test", "debug": True}
# test_app.py
def test_env(config):
assert config["env"] == "test"Dependências de fixtures
As fixtures podem depender de outras fixtures listando-as como parâmetros.
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 == 200Fixtures autouse
Defina autouse=True para aplicar uma fixture a todos os testes no escopo, sem listá-la como parâmetro.
import pytest
@pytest.fixture(autouse=True)
def reset_env(monkeypatch):
monkeypatch.setenv("ENVIRONMENT", "test")
def test_env():
import os
assert os.environ["ENVIRONMENT"] == "test"A fixture tmp_path
O pytest fornece tmp_path como uma fixture integrada que disponibiliza um diretório temporário novo para cada teste.
def test_write_file(tmp_path):
f = tmp_path / "hello.txt"
f.write_text("hello")
assert f.read_text() == "hello"A fixture monkeypatch
monkeypatch permite substituir temporariamente atributos, variáveis de ambiente ou entradas de dicionários durante um teste.
def get_env():
import os
return os.environ.get("MODE", "prod")
def test_mode(monkeypatch):
monkeypatch.setenv("MODE", "test")
assert get_env() == "test"A fixture capsys
capsys captura a saída de stdout e stderr durante os testes.
def greet(name):
print(f"Hello, {name}!")
def test_greet(capsys):
greet("Alice")
out, err = capsys.readouterr()
assert out == "Hello, Alice!\n"Finalizadores de fixtures com request.addfinalizer
Uma alternativa a yield: registre a limpeza usando request.addfinalizer.
import pytest
@pytest.fixture
def resource(request):
r = acquire_resource()
request.addfinalizer(r.release)
return rFixtures parametrizadas
Use params em uma fixture para executar todos os testes dependentes uma vez para cada valor de parâmetro.
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ção rápida
Qual escopo de fixture cria a fixture uma única vez durante toda a sessão de testes?
Recapitulação
As fixtures fornecem preparação e limpeza reutilizáveis por meio de yield. Use scope para controlar o ciclo de vida, conftest.py para compartilhamento e autouse=True para aplicação implícita.
Perguntas Frequentes
A aula “Fixtures e configuração/desmontagem” é grátis?
Sim — o texto completo de “Fixtures e configuração/desmontagem” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.
O que vou aprender em “Fixtures e configuração/desmontagem”?
Use fixtures para compartilhar o estado dos testes e configurar recursos. Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Python Academy?
Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Fixtures e configuração/desmontagem”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Python Academy?
Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Escrevendo seus primeiros testes com pytest
- Fixtures e configuração/desmontagem
- Parametrização e cobertura de testes
- Simulação com unittest.mock