pytest · conftest · alfanumérico 2026

Gerador de CNPJ em pytest

Fixture pra CNPJ válido em testes pytest — cobre numérico e alfanumérico 2026. Session fixture pra economizar API calls, conftest.py compartilhado, parametrize com batch, integração com pytest-django. SDK fakeforge-br.

TL;DR

pip install fakeforge-br pytest

# conftest.py
import pytest
from fakeforge import FakeForge

@pytest.fixture(scope="session")
def ff():
    return FakeForge()

conftest.py compartilhado

# tests/conftest.py
import pytest
from fakeforge import FakeForge

@pytest.fixture(scope="session")
def ff():
    return FakeForge()

@pytest.fixture(scope="session")
def cnpjs_numericos(ff):
    """200 CNPJs numéricos pré-carregados."""
    return ff.cnpj(200)

@pytest.fixture(scope="session")
def cnpjs_alfanumericos(ff):
    """100 CNPJs no formato 2026 (IN RFB 2.229)."""
    return ff.cnpj_alfa(100)

@pytest.fixture(scope="session")
def empresa_completa(ff):
    """Empresa correlacionada: CNPJ + razão social + endereço."""
    return ff.preset("company", 1)[0]

Teste de validador (numérico + alfa)

# tests/test_validador_cnpj.py
import pytest
from myapp.validators import validar_cnpj

class TestValidadorCnpj:
    def test_aceita_cnpjs_numericos_validos(self, cnpjs_numericos):
        for cnpj in cnpjs_numericos:
            assert validar_cnpj(cnpj), f"Rejeitou CNPJ válido: {cnpj}"

    def test_aceita_cnpjs_alfanumericos_2026(self, cnpjs_alfanumericos):
        """IN RFB 2.229 vigência 01/07/2026. Sistemas DEVEM aceitar."""
        for cnpj in cnpjs_alfanumericos:
            assert validar_cnpj(cnpj), f"Validador NÃO cobre 2026: {cnpj}"

    def test_rejeita_cnpj_invalido(self):
        assert not validar_cnpj("11.111.111/1111-11")
        assert not validar_cnpj("abc")
        assert not validar_cnpj("")

Uso em pytest-django

# tests/test_empresa_model.py
import pytest
from myapp.models import Empresa

@pytest.mark.django_db
class TestEmpresaModel:
    def test_salva_empresa_com_cnpj_numerico(self, empresa_completa):
        obj = Empresa.objects.create(
            razao_social=empresa_completa["razao_social"],
            cnpj=empresa_completa["cnpj"],
        )
        assert obj.pk is not None

    def test_bulk_seed_1000_empresas(self, ff):
        cnpjs = ff.cnpj(500)
        cnpjs_alfa = ff.cnpj_alfa(500)
        Empresa.objects.bulk_create([
            Empresa(razao_social=f"Test {i}", cnpj=cnpj)
            for i, cnpj in enumerate(cnpjs + cnpjs_alfa)
        ])
        assert Empresa.objects.count() == 1000

Parametrize massa (stress test)

# tests/test_receita_client.py
import pytest
from myapp.receita import ReceitaClient

class TestReceitaClient:
    @pytest.fixture(autouse=True)
    def mock_receita(self, mocker):
        mocker.patch(
            "myapp.receita.ReceitaClient.consultar",
            return_value={"situacao": "ATIVA", "razao_social": "Mock LTDA"}
        )

    @pytest.mark.parametrize("indice", range(50))
    def test_client_lida_com_qualquer_cnpj_valido(self, cnpjs_numericos, indice):
        client = ReceitaClient()
        result = client.consultar(cnpjs_numericos[indice])
        assert result["situacao"] == "ATIVA"

Próximos passos