Escrever testes automatizados de ponta a ponta (E2E) com frameworks como Cypress ou Selenium é um dos pilares para garantir a qualidade de qualquer aplicação. No entanto, um dos maiores desafios de QA é: de onde tirar a massa de dados para rodar os testes?
Cadastros repetidos frequentemente exigem documentos únicos, como CPF e CNPJ válidos, além de CEPs estruturados e endereços completos. Usar dados reais infringe a LGPD, enquanto dados fixos (hardcoded) nas fixtures fazem os testes falharem a partir da segunda execução por duplicação de chaves no banco.
Neste post, vamos explorar as melhores abordagens para gerar massas de dados dinâmicas e válidas em seus pipelines de teste usando Cypress e Selenium.
Estratégia 1: Massa de Dados Estática (Fixtures) vs. Dinâmica
Existem dois caminhos principais para gerenciar sua massa:
- Fixtures Estáticas (JSON): Excelente para dados de configuração ou fluxos que não exigem exclusividade de chaves únicas no banco (ex: perfis de usuários pré-cadastrados para login).
- Geração Dinâmica: Essencial para fluxos de cadastro de clientes, parceiros ou faturamento. Aqui, cada execução gera novos números matematicamente válidos de CPF, CNPJ e emails aleatórios.
Geração de Dados Dinâmicos no Cypress
No Cypress, podemos estruturar comandos customizados (Custom Commands) em cypress/support/commands.js para gerar dados brasileiros em tempo de execução de maneira limpa.
Passo 1: Criar geradores auxiliares em JS
Em um arquivo de utilidades da sua suíte de testes (ex: cypress/support/utils.js), você pode implementar funções para gerar CPF e CNPJ matematicamente válidos:
// cypress/support/utils.js
export function gerarCPF() {
const numAleatorio = () => Math.floor(Math.random() * 9);
const d = Array.from({ length: 9 }, numAleatorio);
// Cálculo dos dígitos verificadores
let d1 = d.reduce((s, v, i) => s + v * (10 - i), 0);
d1 = 11 - (d1 % 11);
if (d1 >= 10) d1 = 0;
d.push(d1);
let d2 = d.reduce((s, v, i) => s + v * (11 - i), 0);
d2 = 11 - (d2 % 11);
if (d2 >= 10) d2 = 0;
d.push(d2);
return d.join('');
}
Passo 2: Integrar no teste do Cypress
Agora podemos injetar esse dado dinamicamente nos campos do formulário:
import { gerarCPF } from '../support/utils';
describe('Fluxo de Cadastro de Usuário', () => {
it('Deve cadastrar um cliente com sucesso', () => {
const cpfFicticio = gerarCPF();
const emailFicticio = `teste_${Date.now()}@devthru.com.br`;
cy.visit('/cadastro');
cy.get('#nome').type('Desenvolvedor de Teste');
cy.get('#email').type(emailFicticio);
cy.get('#cpf').type(cpfFicticio);
cy.get('#cep').type('01310-100'); // CEP da Av. Paulista
cy.get('button[type="submit"]').click();
cy.get('.toast-success').should('be.visible').and('contain', 'Cadastro realizado!');
});
});
Injetando Massa de Dados Dinâmica no Selenium (Python)
Se a sua stack usa Selenium WebDriver com Python, você pode adotar uma estratégia similar. O uso de geradores customizados mantém os testes isolados e rápidos.
import time
import random
from selenium import webdriver
from selenium.webdriver.common.by import By
def gerar_cpf_fake():
# Retorna um CPF matematicamente válido formatado
d = [random.randint(0, 9) for _ in range(9)]
# Dígito 1
soma = sum(d[i] * (10 - i) for i in range(9))
d1 = 11 - (soma % 11)
d.append(0 if d1 >= 10 else d1)
# Dígito 2
soma = sum(d[i] * (11 - i) for i in range(10))
d2 = 11 - (soma % 11)
d.append(0 if d2 >= 10 else d2)
return "".join(map(str, d))
# Iniciando Driver do Selenium
driver = webdriver.Chrome()
try:
driver.get("http://localhost:3000/cadastro")
# Preenchendo campos
driver.find_element(By.ID, "nome").send_keys("Analista de QA")
driver.find_element(By.ID, "cpf").send_keys(gerar_cpf_fake())
driver.find_element(By.ID, "email").send_keys(f"qa_{int(time.time())}@devthru.com")
driver.find_element(By.CSS_SELECTOR, "button.submit").click()
time.sleep(2) # Espera simples apenas para ilustrar
assert "Sucesso" in driver.page_source
finally:
driver.quit()
Agilizando a Geração com Ferramentas Especializadas
Se você precisa de massas de dados complexas e prontas (com nome, CPF, CNPJ, telefone e endereços integrados e coerentes) para rodar manualmente ou configurar scripts maiores, usar plataformas específicas economiza muito tempo.
Com o DevThru, você pode gerar massas inteiras em segundos:
- Obtenha chaves válidas de CPF no nosso Gerador de CPF.
- Gere dados empresariais com o Gerador de CNPJ.
- Gere CEPs e endereços reais no Gerador de Endereços (CEP).
- Ou crie um lote completo customizado no Mock Data Generator.
Integrar geradores consistentes na sua rotina de QA garante testes resilientes, evita retrabalho e protege seu ambiente contra falhas causadas por dados expirados ou duplicados.
🛠️ Experimente na prática
Use nossas ferramentas online gratuitas — sem cadastro, direto no navegador.
