Gerenciar autenticação eficientemente é fundamental em suítes de testes E2E. O Playwright oferece mecanismos para reutilizar sessões sem repetir login em cada teste.
// LENTO: cada teste faz login separadamente
test.beforeEach(async ({ page }) => {
await page.goto('/login');
await page.getByLabel('E-mail').fill('usuario@email.com');
await page.getByLabel('Senha').fill('Senha@123');
await page.getByRole('button', { name: 'Entrar' }).click();
await page.waitForURL('/dashboard');
});O storageState salva cookies e localStorage, reproduzindo a sessão sem novo login.
// tests/auth.setup.ts
import { test as setup, expect } from '@playwright/test';
import path from 'path';
const arquivoAuth = path.join(__dirname, '../playwright/.auth/usuario.json');
setup('autenticar como usuário comum', async ({ page }) => {
await page.goto('/login');
await page.getByLabel('E-mail').fill('usuario@email.com');
await page.getByLabel('Senha').fill('Senha@123');
await page.getByRole('button', { name: 'Entrar' }).click();
// Verifica que o login foi bem-sucedido
await expect(page).toHaveURL('/dashboard');
// Salva o estado da sessão
await page.context().storageState({ path: arquivoAuth });
});import { defineConfig } from '@playwright/test';
import path from 'path';
export default defineConfig({
projects: [
// Projeto de setup: executa primeiro
{
name: 'setup',
testMatch: /.*\.setup\.ts/,
},
// Testes que precisam de autenticação
{
name: 'autenticado',
testDir: './tests/autenticado',
dependencies: ['setup'],
use: {
storageState: 'playwright/.auth/usuario.json',
},
},
// Testes que não precisam de autenticação
{
name: 'publico',
testDir: './tests/publico',
},
],
});// tests/autenticado/dashboard.spec.ts
import { test, expect } from '@playwright/test';
// Nenhum login necessário — já começa autenticado!
test('deve exibir o dashboard', async ({ page }) => {
await page.goto('/dashboard');
await expect(page.getByRole('heading', { name: 'Início' })).toBeVisible();
});// tests/admin.setup.ts
setup('autenticar como admin', async ({ page }) => {
await page.goto('/login');
await page.getByLabel('E-mail').fill('admin@empresa.com');
await page.getByLabel('Senha').fill('Admin@123');
await page.getByRole('button', { name: 'Entrar' }).click();
await page.context().storageState({ path: 'playwright/.auth/admin.json' });
});// playwright.config.ts — projetos para admin
{
name: 'admin',
testDir: './tests/admin',
dependencies: ['setup-admin'],
use: {
storageState: 'playwright/.auth/admin.json',
},
},playwright/.auth/As sessões salvas contêm tokens e cookies — nunca as commite!
Ir para: Testes de API