Skip to content

Latest commit

 

History

History
126 lines (99 loc) · 3.16 KB

File metadata and controls

126 lines (99 loc) · 3.16 KB

Autenticação

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.

Problema: 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');
});

Solução: storageState

O storageState salva cookies e localStorage, reproduzindo a sessão sem novo login.

Passo 1: Crie o arquivo de setup

// 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 });
});

Passo 2: Configure no playwright.config.ts

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',
    },
  ],
});

Passo 3: Escreva testes já autenticados

// 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();
});

Múltiplos Perfis de Autenticação

// 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',
  },
},

Adicionar ao .gitignore

playwright/.auth/

As sessões salvas contêm tokens e cookies — nunca as commite!


Ir para: Testes de API