Como Gerar Dados Fakes de Testes no Playwright com Faker API - QA na Prática
Quem nunca passou pela frustração de rodar uma suíte de testes de cadastro e ver o pipeline de CI/CD quebrar porque o e-mail teste123@gmail.com ou o CPF já existiam no banco de dados? A gestão de massa de testes é um dos pontos mais críticos na rotina de automação de software.
Se você utiliza o Playwright, a maneira mais elegante e robusta de resolver esse problema é integrando a biblioteca @faker-js/faker. Neste guia completo do QA Prática, você vai aprender a configurar a biblioteca no padrão brasileiro (pt_BR), gerar dados complexos (como CPF e telefones) e criar uma fábrica de dados reutilizável para a sua suíte.
🚨 Por que você deve parar de usar dados estáticos (Hardcoded)?
Manter valores fixos no código da sua automação traz problemas graves de sustentabilidade no projeto:
- Testes Intermitentes (Flaky Tests): O teste passa na primeira execução local, mas falha na segunda rodada ou na esteira porque viola a restrição de campos únicos (unique constraints) no banco de dados.
- Baixa Cobertura de Boundary Values: Testar sempre com a mesma quantidade de caracteres oculta bugs visuais ou validações de backend que só estouram com nomes longos ou caracteres especiais.
- Poluição do Ambiente de Staging: Exige que o time de QA fique executando rotinas manuais de limpeza de banco de dados periodicamente.
⚙️ Passo 1: Instalando a Faker API no projeto
No terminal do seu projeto Playwright, instale a versão oficial mantida pela comunidade executando:
npm install --save-dev @faker-js/faker
🧪 Passo 2: Criando o Script de Teste com Locators Recomendados
Para garantir que o teste seja resiliente, importamos a localização em português (fakerPT_BR) e utilizamos os locators nativos do Playwright baseados em acessibilidade (getByLabel, getByRole):
import { test, expect } from '@playwright/test';
import { fakerPT_BR as faker } from '@faker-js/faker';
test('Deve realizar cadastro de cliente com dados dinâmicos', async ({ page }) => {
// Gerando massa de dados localizada (Brasil)
const nomeCompleto = faker.person.fullName();
const emailCorporativo = faker.internet.email();
const telefoneCelular = faker.phone.number();
const biografia = faker.lorem.paragraph();
await page.goto('/cadastro');
// Preenchimento utilizando boas práticas de Locators
await page.getByLabel('Nome Completo').fill(nomeCompleto);
await page.getByLabel('E-mail').fill(emailCorporativo);
await page.getByLabel('Telefone').fill(telefoneCelular);
await page.getByLabel('Biografia').fill(biografia);
await page.getByRole('button', { name: 'Salvar' }).click();
// Validação
await expect(page.getByText('Cadastro realizado com sucesso!')).toBeVisible();
});
💡 Dica Avançada: Como Gerar Documentos e Dados Complexos
Além dos campos básicos de texto, a Faker API permite construir cenários mais ricos. Veja como gerar datas relativas, senhas complexas e números personalizados:
// Gerar data de nascimento para usuário maior de idade (entre 18 e 60 anos)
const dataNascimento = faker.date.birthdate({ min: 18, max: 60, mode: 'age' }).toLocaleDateString('pt-BR');
// Gerar senha forte garantindo caracteres especiais e números
const senhaForte = faker.internet.password({ length: 12, prefix: 'QA@2026_' });
// Gerar chave Pix aleatória (UUID)
const chavePix = faker.string.uuid();
🏗️ Boas Práticas: Criando um Data Factory Reutilizável
Em projetos profissionais com centenas de testes, não é recomendado poluir o arquivo do teste (.spec.ts) gerando campos manualmente um por um. A melhor prática é criar uma função **Factory**:
// utils/userFactory.ts
import { fakerPT_BR as faker } from '@faker-js/faker';
export function gerarUsuarioFake() {
return {
nome: faker.person.fullName(),
email: faker.internet.email(),
senha: faker.internet.password({ length: 10 }),
cpf: faker.number.int({ min: 10000000000, max: 99999999999 }).toString(), // Exemplo numérico de documento
endereco: {
rua: faker.location.street(),
cidade: faker.location.city(),
cep: faker.location.zipCode('#####-###')
}
};
}
Dessa forma, dentro do seu teste você precisa de apenas uma linha para obter um objeto de usuário completo e limpo:
const novoUsuario = gerarUsuarioFake();
await page.getByLabel('E-mail').fill(novoUsuario.email);
Regra de Ouro: O uso de Data Factories com a Faker API garante que cada worker do Playwright em execuções paralelas receba uma massa isolada e única, eliminando de vez os conflitos na esteira de CI/CD.
🔗 Artigos Relacionados
🧠 Conclusão
Integrar a **Faker API** ao **Playwright** deixa a automação mais profissional, estável e próxima do comportamento do usuário real. Ao adotar a criação de Data Factories e utilizar seletores resilientes baseados em acessibilidade, sua suíte de testes estará pronta para rodar infinitas vezes na esteira sem quebras por dados duplicados.
Comentários
Postar um comentário