Skip to content

Latest commit

 

History

History
129 lines (94 loc) · 2.96 KB

File metadata and controls

129 lines (94 loc) · 2.96 KB

Testes Paralelos

O Playwright executa testes em paralelo por padrão, usando múltiplos workers — processos isolados que rodam testes simultaneamente.

Como Funciona

Por padrão, o Playwright cria um número de workers igual à metade dos núcleos da CPU. Cada worker tem seu próprio contexto de browser.

CPU: 8 núcleos → 4 workers em paralelo

Configuração de Workers

// playwright.config.ts
export default defineConfig({
  // Número fixo de workers
  workers: 4,

  // Ou percentual da CPU
  workers: '50%',

  // Para CI (evita sobrecarga no servidor)
  workers: process.env.CI ? 1 : undefined,
});

fullyParallel

Por padrão, testes dentro de um mesmo arquivo rodam em série. Com fullyParallel, todos rodam em paralelo:

export default defineConfig({
  fullyParallel: true,  // recomendado quando os testes são independentes
});

Ou por arquivo/describe:

test.describe.configure({ mode: 'parallel' });

test('teste 1', async ({ page }) => { /* ... */ });
test('teste 2', async ({ page }) => { /* ... */ });
test('teste 3', async ({ page }) => { /* ... */ });
// Os 3 rodam em paralelo

Sharding: Dividindo Testes entre Máquinas

Para distribuir testes entre múltiplas máquinas no CI:

# Máquina 1: roda 1/3 dos testes
npx playwright test --shard=1/3

# Máquina 2: roda 2/3 dos testes
npx playwright test --shard=2/3

# Máquina 3: roda 3/3 dos testes
npx playwright test --shard=3/3

GitHub Actions com sharding

jobs:
  testes:
    strategy:
      matrix:
        shard: [1, 2, 3]

    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20

      - run: npm ci
      - run: npx playwright install --with-deps

      - name: Executar shard ${{ matrix.shard }}
        run: npx playwright test --shard=${{ matrix.shard }}/3

      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: resultados-shard-${{ matrix.shard }}
          path: test-results/

Rodando em Série (quando necessário)

// Quando os testes precisam rodar em ordem específica
test.describe.configure({ mode: 'serial' });

Ou para um projeto inteiro:

export default defineConfig({
  fullyParallel: false,
  workers: 1,
});

Pré-requisitos para Paralelismo

Para que testes paralelos funcionem bem:

  1. Testes independentes: cada teste cria e limpa seus próprios dados
  2. Sem estado compartilhado entre testes (sem variáveis globais mutáveis)
  3. Dados únicos: use timestamps ou UUIDs para criar dados únicos
  4. Contextos isolados: cada teste usa sua própria page (garantido pelo Playwright)
// Bom: dados únicos por teste
test('criar usuário', async ({ page, request }) => {
  const email = `usuario_${Date.now()}@teste.com`;
  await request.post('/api/usuarios', { data: { email } });
  // ...
});

Ir para: CI/CD