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

🚀 O que estudar para ser QA em 2026: guia completo para iniciantes