0Pricing
Python Academy · Aula

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 None

Escopos 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 == 200

Fixtures 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 r

Fixtures 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() == 1

Verificaçã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

  1. Escrevendo seus primeiros testes com pytest
  2. Fixtures e configuração/desmontagem
  3. Parametrização e cobertura de testes
  4. Simulação com unittest.mock
← Voltar para Python Academy