pytest · conftest · Correios
Gerador de Endereço em pytest
Fixture pytest com endereço brasileiro. Session fixture, conftest.py, pytest-django, mock de Correios API pra teste de frete.
pip install fakeforge-br pytest pytest-mockconftest.py
# tests/conftest.py
import pytest
from fakeforge import FakeForge
@pytest.fixture(scope="session")
def ff():
return FakeForge()
@pytest.fixture(scope="session")
def enderecos(ff):
return ff.address(100)
@pytest.fixture(scope="session")
def enderecos_por_uf(enderecos):
grupos = {}
for e in enderecos:
grupos.setdefault(e["estado"], []).append(e)
return grupos
@pytest.fixture
def endereco_sp(enderecos_por_uf):
return enderecos_por_uf.get("SP", [None])[0]Teste de frete Django
# tests/test_frete.py
import pytest
from myapp.frete import CalculadoraFrete
@pytest.mark.django_db
class TestFrete:
def test_frete_sp_barato(self, endereco_sp):
if endereco_sp is None:
pytest.skip("Sem endereço SP no cache")
valor = CalculadoraFrete.calcular(cep=endereco_sp["cep"], peso_kg=2)
assert 0 < valor < 50
def test_frete_todas_regioes(self, enderecos_por_uf):
for uf, enderecos in enderecos_por_uf.items():
if not enderecos:
continue
e = enderecos[0]
valor = CalculadoraFrete.calcular(cep=e["cep"], peso_kg=1)
assert valor > 0, f"Frete negativo pra {uf}"Mock Correios API
# tests/test_correios_service.py
class TestCorreiosService:
@pytest.fixture(autouse=True)
def mock_correios(self, mocker):
return mocker.patch(
"myapp.correios.CorreiosClient.consultar_cep",
return_value={"logradouro": "Mock Rua", "cidade": "Mock", "uf": "SP"}
)
def test_service_consulta_cep(self, endereco_sp, mock_correios):
from myapp.endereco.service import EnderecoService
service = EnderecoService()
result = service.consultar(endereco_sp["cep"])
assert result["uf"] == "SP"
mock_correios.assert_called_once()