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

👉 Quer dominar automação com Playwright? Se você quer aprender a estruturar projetos completos com Page Object Model, Data Factories e integração contínua, confira nosso Guia Prático de Playwright.

🧠 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

Postagens mais visitadas deste blog

Como aprender Playwright do zero: guia completo para iniciantes em automação de testes