Design Patterns para Automação de Testes: Guia Prático
Se você já escreveu automação de testes, provavelmente já enfrentou aquele momento em que os testes ficam tão acoplados que qualquer mudança quebram dezenas de scripts. É aí que os Design Patterns entram.
Neste artigo, vamos ver os padrões mais usados na indústria, com exemplos práticos em Playwright e Cypress.
1. Page Object Model (POM)
O mais clássico e amplamente adotado. Separa a lógica de localização dos elementos da lógica dos testes.
// Playwright - Page Object
class LoginPage {
constructor(private page: Page) {}
private emailInput = () => this.page.locator('#email');
private passwordInput = () => this.page.locator('#password');
private submitButton = () => this.page.locator('button[type=submit]');
async login(email: string, password: string) {
await this.emailInput().fill(email);
await this.passwordInput().fill(password);
await this.submitButton().click();
}
}
Vantagens: Manutenção centralizada, reutilizabilidade, código limpo nos testes.
2. Screenplay Pattern
Mais avançado, modela testes como atores realizando ações em um cenário. Excelente para testes complexos com múltiplos usuários.
3. Data-Driven Testing
Separa os dados dos testes da lógica. Ideal para validar múltiplas entradas no mesmo fluxo.
const testCases = [
{ user: 'admin', expected: 'Dashboard' },
{ user: 'viewer', expected: 'Read Only' },
];
for (const tc of testCases) {
test(Login as ${tc.user}, async ({ page }) => {
await loginAs(page, tc.user);
await expect(page).toHaveTitle(tc.expected);
});
}
4. Fixture Pattern (Cypress)
No Cypress, fixtures são nativos e permitem setup/teardown elegante:
test.use({
storageState: 'auth.json',
});
test('access dashboard', async ({ page }) => {
await page.goto('/dashboard');
await expect(page.locator('.stats')).toBeVisible();
});
Conclusão
Não existe um pattern perfeito para todos os casos. O ideal é combinar POM com Data-Driven e ajustar conforme a complexidade do projeto.
Quer aprender mais? Visite QA Overflow para tutoriais completos.
--- Artigo por Victor Oliveira - QA Senior com 13+ anos de experiência