Skip to main content

fakeforge

SDK oficial do FakeForge para Python — gera dados brasileiros válidos (CPF, CNPJ, CEP, PIX, cartão de crédito) para testes de software.

  • Zero dependências runtime (usa urllib nativo)
  • Type hints completos (compatível com mypy strict)
  • Python 3.8+
  • Validação real — todos os documentos passam mod-11 da Receita Federal, Luhn, ANATEL
  • Presets correlacionados — pessoa completa com CPF + email + endereço + telefone em 1 chamada
  • CNPJ alfanumérico 2026 — cobertura do novo formato (IN RFB 2.229)
  • Grátis — 50 chamadas/dia sem API key, ou 10.000/dia com plano Dev (R$29/mês)

Instalação

pip install fakeforge-br
poetry add fakeforge
uv add fakeforge

Uso rápido

from fakeforge import FakeForge

ff = FakeForge()

# CPFs válidos (mod-11 da Receita Federal)
cpfs = ff.cpf(10)
# ['123.456.789-09', '987.654.321-00', ...]

# CNPJs válidos (mod-11)
cnpjs = ff.cnpj(5)

# Chave PIX no formato BACEN
pix = ff.pix_key(3)

# Cartão de crédito com Luhn válido
cards = ff.credit_card(5)
# [{'number': '...', 'brand': 'visa', 'cvv': '123', 'expiry': '12/28'}, ...]

# Pessoa completa correlacionada
[pessoa] = ff.person(1)
print(pessoa["name"], pessoa["cpf"], pessoa["email"])

Presets: dados correlacionados em 1 chamada

Presets retornam objetos com múltiplos campos que se relacionam — email deriva do nome, DDD bate com o estado do endereço, etc.

customers = ff.preset("customer", 100)

for c in customers:
    print({
        "name": c["name"],
        "cpf": c["cpf"],
        "email": c["email"],
        "phone": c["phone"],
        "address": c["address"],
    })

Presets disponíveis:

Preset Retorna
customer pessoa + endereço + email + telefone + PIX
employee pessoa + conta bancária + PIX
company empresa + endereço + contato
ecommerce_order cliente + cartão + entrega
contact_list nome + email + telefone

Comparação com faker (pt-BR) e python-brasilidades

Recurso faker (pt-BR) python-brasilidades fakeforge
CPF com mod-11 válido
CNPJ com mod-11 válido
CNPJ alfanumérico 2026
Cartão com Luhn
PIX BACEN (4 formatos)
Correlação nome ↔ email ↔ DDD
DDDs oficiais ANATEL Parcial ✅ (67 DDDs)
17 bancos brasileiros com DV
Presets bundle (customer, employee, etc)
API HTTP (sem instalar dep em outra linguagem)

fakeforge é o único com API HTTP + SDK Python que permite escalar geração em CI/CD sem instalar dep de biblioteca em cada linguagem do stack. Perfeito pra times que usam Python no backend mas Node no frontend.

Uso com pytest

Fixture reutilizável

# conftest.py
import pytest
from fakeforge import FakeForge

@pytest.fixture(scope="session")
def customers():
    """100 customers correlacionados. Escopo session pra reutilizar entre testes."""
    ff = FakeForge()
    return ff.preset("customer", 100)


@pytest.fixture(scope="session")
def cpfs_validos():
    """1000 CPFs válidos pra teste de load."""
    ff = FakeForge()
    return ff.cpf(1000)
# test_checkout.py
def test_checkout_aceita_cpf_valido(customers, client):
    for customer in customers[:20]:
        response = client.post("/checkout", json={
            "cpf": customer["cpf"],
            "email": customer["email"],
        })
        assert response.status_code == 200

Django ORM seed

# management/commands/seed_customers.py
from django.core.management.base import BaseCommand
from fakeforge import FakeForge
from myapp.models import Customer

class Command(BaseCommand):
    help = "Popula banco com 1000 customers via FakeForge"

    def handle(self, *args, **options):
        ff = FakeForge(api_key="sua_key_dev")  # 10.000/dia no Dev
        customers = ff.preset("customer", 1000)

        Customer.objects.bulk_create([
            Customer(
                cpf=c["cpf"],
                name=c["name"],
                email=c["email"],
                phone=c["phone"],
            )
            for c in customers
        ])

        self.stdout.write(f"✓ {len(customers)} customers inseridos")

FastAPI mock

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

@pytest.fixture
def fake_customer():
    ff = FakeForge()
    return ff.preset("customer", 1)[0]

@pytest.mark.asyncio
async def test_signup(fake_customer, client: AsyncClient):
    response = await client.post("/signup", json=fake_customer)
    assert response.status_code == 201

API key opcional (plano Dev/Team)

Sem API key: 50 chamadas/dia por IP, até 100 items por chamada. Perfeito pra dev local.

Com API key do plano Dev (R$29/mês): 10.000 chamadas/dia, até 10.000 items por chamada. Ideal pra CI/CD, seed em produção, load test.

import os
from fakeforge import FakeForge

ff = FakeForge(api_key=os.environ["FAKEFORGE_API_KEY"])
cpfs = ff.cpf(10_000)  # no Dev, cabe em 1 chamada

Pegue sua API key em fakeforge.com.br/dashboard.

Tratamento de erros

from fakeforge import FakeForge, FakeForgeError

ff = FakeForge()

try:
    cpfs = ff.cpf(1000)
except FakeForgeError as e:
    if e.status == 429:
        print(f"Rate limit: {e.used_today}/{e.daily_limit}")
        print(f"Upgrade: {e.upgrade_url}")
    else:
        raise

API completa

Documentos pessoais

  • cpf(quantity=1, formatted=True) -> list[str]
  • cnpj(quantity=1, formatted=True) -> list[str]
  • cnpj_alfa(quantity=1, formatted=True) -> list[str] — novo formato 2026
  • cnh(quantity=1, formatted=True) -> list[str]
  • rg(quantity=1, formatted=True) -> list[str]
  • pis(quantity=1, formatted=True) -> list[str]
  • renavam(quantity=1, formatted=True) -> list[str]
  • titulo_eleitor(quantity=1, formatted=True) -> list[str]
  • placa(quantity=1) -> list[str]

Contato

  • email(quantity=1) -> list[str]
  • phone(quantity=1, formatted=True) -> list[str] — celular ANATEL
  • landline(quantity=1, formatted=True) -> list[str] — fixo

Endereço

  • cep(quantity=1, formatted=True) -> list[str]
  • address(quantity=1, formatted=True) -> list[dict]

Pessoa completa

  • person(quantity=1, formatted=True) -> list[dict]
  • full_name(quantity=1) -> list[str]

Financeiro

  • credit_card(quantity=1, formatted=True) -> list[dict]
  • pix_key(quantity=1) -> list[str]
  • bank_account(quantity=1, formatted=True) -> list[dict]

Empresa

  • company(quantity=1, formatted=True) -> list[dict]

Presets

  • preset(name, quantity=1, formatted=True) -> list[dict]

Genérico

  • generate(type_, quantity=1, formatted=True) -> list[Any]

Perguntas frequentes

É legal usar CPFs/CNPJs gerados em testes?

Sim. Gerar números que passam validação matemática (mod-11) pra fins de teste é prática padrão em desenvolvimento. Crime é usar CPF/CNPJ (fake ou real) pra fraude, sonegação ou cadastro em nome de terceiro.

Os dados batem no DICT/SPC/Serasa?

Não. São dados matematicamente válidos mas não existem em nenhuma base oficial. Perfeito pra teste de formato, validação de schema e seed de staging. Não serve pra teste com API externa que consulta base real.

Como configurar em CI (GitHub Actions)?

- name: Rodar testes com FakeForge
  env:
    FAKEFORGE_API_KEY: ${{ secrets.FAKEFORGE_API_KEY }}
  run: pytest

Cache dos dados na primeira chamada evita esgotar quota:

# tests/fixtures.py
import json
from pathlib import Path
from fakeforge import FakeForge

CACHE = Path(__file__).parent / "customers.json"

def get_customers():
    if CACHE.exists():
        return json.loads(CACHE.read_text())

    ff = FakeForge()
    customers = ff.preset("customer", 100)
    CACHE.write_text(json.dumps(customers, indent=2, ensure_ascii=False))
    return customers

Suporte

Licença

MIT — veja LICENSE para detalhes.


Feito por Everton Paula — engenheiro brasileiro que precisou de dados válidos pra testar checkout PIX e escreveu essa lib porque nenhuma outra funcionava direito.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fakeforge_br-0.1.0.tar.gz (8.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fakeforge_br-0.1.0-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

File details

Details for the file fakeforge_br-0.1.0.tar.gz.

File metadata

  • Download URL: fakeforge_br-0.1.0.tar.gz
  • Upload date:
  • Size: 8.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.3

File hashes

Hashes for fakeforge_br-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9f549cc438ed43683a6fc9a166f7f3156bd2a56954352a65a57ec30f2504f719
MD5 17afc08b3b909078db4ad19d3f3a6f96
BLAKE2b-256 106d0eadcf08d23ee522a81044d7a00602c606f17b8ed2c604957e7bfba10f72

See more details on using hashes here.

File details

Details for the file fakeforge_br-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: fakeforge_br-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.3

File hashes

Hashes for fakeforge_br-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a6b563bece8f51dc7feb7c4de258125ac9d149430a35fc7b4e48f19a5f11ab4e
MD5 38ec47de2b3e0c4594d794ab92ad4acf
BLAKE2b-256 9b8826068d3a252841eaa377f8a41f2884a848742be85e30ca7160a05155ae9b

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.0

2 files

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page