Pular para o conteúdo
Massa de teste

Massa de teste para QA: 5 estratégias com documentos brasileiros

Publicado em · Atualizado em · 6 min de leitura · Equipe Gerador Brasil

Para QA, as cinco estratégias que mais servem com documentos brasileiros são: fixtures pequenas e versionadas, geração por semente, lote grande para volume, anonimização do que veio de produção e um arquivo à parte com casos negativos. Use uma ou duas por tipo de teste, e nunca copie dado real de cliente para o ambiente de teste.

Para testar um sistema brasileiro, você precisa de CPF, CNPJ, PIS, placa e inscrição estadual que o sistema aceite, mas que não sejam de ninguém. Cinco estratégias cobrem quase tudo: fixture versionada, geração por semente, lote grande, anonimização e arquivo de casos negativos. Cada uma resolve um problema diferente, e o truque é saber qual usar em qual teste.

Para montar a massa em CSV, JSON ou SQL com os tipos que o seu teste usa, vá direto ao montador de massa em lote. O resto do texto explica quando cada estratégia vale a pena.

1. Fixtures pequenas e versionadas

Uma fixture é um arquivo curto, guardado no repositório, com registros nomeados pelo que testam. Serve para regressão: o resultado do teste só muda se o código mudar.

Dê nome ao cenário, não ao número. Um exemplo em JSON, com valores gerados e fictícios:

[
  { "cenario": "fornecedor-cnpj-numerico", "cnpj": "55658505000130" },
  { "cenario": "fornecedor-cnpj-com-letras", "cnpj": "GB.NM5.7OS/0001-40" },
  { "cenario": "funcionario-novo", "cpf": "200.631.134-49", "pis": "950.22799.72-5" }
]

Dez a vinte registros costumam bastar. Mais que isso, ninguém lê, e a fixture vira um segundo banco de dados para manter.

2. Geração por semente

Com a mesma semente, os mesmos tipos e as mesmas opções, o gerador devolve sempre a mesma lista. Isso permite recriar a massa a cada execução da suíte, em vez de reaproveitar um banco sujo de testes anteriores.

Conferi no gerador do site. Com a semente 2026 e os tipos CNPJ alfanumérico, CPF, PIS e inscrição estadual de SP, duas gerações seguidas de 5 linhas saíram idênticas. Trocando a semente para 2027, a primeira linha mudou por completo. A semente 2026 produziu, por exemplo:

cnpj,cpf,pis,inscricao_estadual,uf
GB.NM5.7OS/0001-40,200.631.134-49,950.22799.72-5,242.683.906.034,SP
RQ.EYO.MD1/0001-50,919.824.196-60,875.45775.69-3,301.099.110.450,SP

O que vai para o repositório é a receita, não o arquivo: tipos, opções, quantidade e semente. Se você mudar um tipo marcado, a lista muda, então anote a receita inteira.

3. Lote grande para volume

Paginação, importação de planilha, relatório e carga pedem milhares de linhas, e ninguém digita isso. No gerador do site, uma massa de 10.000 linhas com os nove tipos de número saiu em cerca de meio segundo, rodando no Node.

Três cuidados com lote:

  • Coluna de documento é texto. Zero à esquerda some em coluna numérica, e o CNPJ com letras nem entra. No Excel, importe as colunas como texto.
  • Misture os formatos. O gerador de CNPJ permite numérico e alfanumérico. No modo alfanumérico, todo CNPJ sai com pelo menos uma letra na raiz (conferi em 1.000 linhas), então uma fatia da massa com letras é o teste mais barato para achar código que ainda trata CNPJ como número.
  • Sem repetição. Se o seu teste cadastra cada linha como um registro único, uma chave duplicada derruba o lote por motivo que não é o que você queria testar.

4. Anonimização do que veio de produção

Às vezes o bug só aparece com dado “de verdade”, e a tentação é copiar o banco de produção. A LGPD pede que o tratamento se limite ao mínimo indispensável para a finalidade (art. 6º, inciso III), e testar um sistema raramente exige dado pessoal real.

A regra de bolso: se der para trocar o dado por um fictício que tenha o mesmo formato, troque. Você mantém a estrutura (tamanhos, nulos, proporção de CNPJ matriz e filial) e perde só o que identifica alguém.

A lei trata dado anonimizado como fora do conceito de dado pessoal, mas deixa de tratar assim quando a anonimização pode ser revertida com meios próprios ou esforço razoável (art. 12). Trocar só o último dígito, ou embaralhar a máscara, não anonimiza nada: o CPF continua identificando a pessoa. Substituir por número sorteado, sem ligação com o original, é o caminho seguro.

5. Arquivo de casos negativos

Teste de campo precisa de número inválido, e ele não deve ficar misturado aos válidos. Um arquivo à parte, com o defeito no nome, deixa o teste legível. Os defeitos mais úteis:

  • dígito verificador errado (um deles ou os dois);
  • tamanho errado, por um caractere a menos ou a mais;
  • todos os dígitos iguais, como 111.111.111-11;
  • letra no lugar do dígito verificador do CNPJ;
  • inscrição estadual de outro estado, para ver se o seu sistema valida pela UF certa.

Os casos de borda da conta também entram aqui, como os CPFs em que o resto da divisão cai em 0, 1 ou 10. O texto sobre o módulo 11 traz um exemplo de cada.

Como conferir a massa antes de usar

Antes de culpar o sistema, confira a massa. O código abaixo lê o CSV de exemplo e valida o dígito do CPF de cada linha, com node:assert. Ele foi executado no Node e passa nas duas linhas do arquivo acima, e falha se você mexer num dígito.

import assert from 'node:assert/strict';

const modulo11 = (digitos, pesos) => {
  const resto = digitos.reduce((s, d, i) => s + d * pesos[i], 0) % 11;
  return resto < 2 ? 0 : 11 - resto;
};

function cpfConfere(texto) {
  const n = texto.replace(/\D/g, '');
  if (n.length !== 11 || /^(\d)\1{10}$/.test(n)) return false;
  const d = [...n].map(Number);
  const d1 = modulo11(d.slice(0, 9), [10, 9, 8, 7, 6, 5, 4, 3, 2]);
  const d2 = modulo11([...d.slice(0, 9), d1], [11, 10, 9, 8, 7, 6, 5, 4, 3, 2]);
  return d1 === d[9] && d2 === d[10];
}

const csv = `cnpj,cpf,pis,inscricao_estadual,uf
GB.NM5.7OS/0001-40,200.631.134-49,950.22799.72-5,242.683.906.034,SP
RQ.EYO.MD1/0001-50,919.824.196-60,875.45775.69-3,301.099.110.450,SP`;

for (const linha of csv.split('\n').slice(1)) {
  assert.ok(cpfConfere(linha.split(',')[1]), `CPF inválido: ${linha}`);
}
assert.equal(cpfConfere('200.631.134-48'), false); // dígito errado
console.log('massa ok');

Qual combinar com qual?

Tipo de teste Estratégia principal Apoio
Regressão de tela e API Fixture versionada Casos negativos
Integração entre sistemas Semente Fixture para o caso quebrado
Carga e importação Lote Semente, para repetir a carga
Reproduzir bug que só aparece com volume real Anonimização Lote, para comparar
Validação de campos Casos negativos Fixture

Em qualquer combinação, o ponto de partida é o mesmo: números fictícios, sorteados, sem ligação com pessoa ou empresa alguma. Para montar o arquivo, abra o gerador de massa de teste, marque os tipos, informe a semente e baixe. Os números servem só para testar software.

Números fictícios, apenas para teste de software. Eles são sorteados no seu navegador e seguem a regra do dígito verificador, mas não vêm de nenhum cadastro. Usar documento falso para enganar alguém é crime.
Dúvidas

Perguntas frequentes

Qual a melhor estratégia de massa de teste para QA?

Depende do teste. Para regressão, fixtures pequenas e fixas. Para integração e carga, geração por semente e lote. Para validar campos, um arquivo à parte com casos inválidos. Misturar tudo num só arquivo é o erro mais comum.

Posso usar um backup de produção como massa de teste?

Só depois de anonimizar de verdade, de forma que não dê para reverter com esforço razoável. Um backup copiado sem tratamento leva dado pessoal real para um ambiente com menos controle, o que contraria o princípio da necessidade da LGPD.

Como guardar uma massa de 10.000 linhas no repositório?

Não guarde o arquivo. Guarde a receita: tipos, opções, quantidade e semente. Quem precisar recria a massa idêntica em segundos, e o repositório não cresce a cada mudança.

Fontes

Blog

Leia também

Ferramenta

Veja também

Atualizado em 14/11/2026.