Skip to content
Vitest 2
Main Navigation GuiaAPIConfiguraçãoModo NavegadorAvançado
2.1.9
1.6.1
0.34.6

Português – Brasil

English
简体中文
繁體中文
Español
Français
Русский
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Português – Brasil

English
简体中文
繁體中文
Español
Français
Русский
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Aparência

Sidebar Navigation

Por que Vitest

Primeiros Passos

Recursos

Workspace

Interface de Linha de Comando

Filtrando Testes

Reporters

Cobertura

Snapshot

Mocking

Testando Tipos

Vitest UI

Testes no Código Fonte

Contexto de Teste

Ambiente de Teste

Expandindo Matchers

Integrações de IDE

Depuração

Comparações com Outros Executores de Teste

Guia de Migração

Erros Comuns

Profiling Test Performance

Otimizando o Desempenho

Nesta página

Melhorando o Desempenho ​

Isolamento de Teste ​

Por padrão, o Vitest executa cada arquivo de teste em um ambiente isolado, com base no pool configurado:

  • O pool threads executa cada arquivo de teste em um Worker separado.
  • O pool forks executa cada arquivo de teste em um processo filho separado.
  • O pool vmThreads executa cada arquivo de teste em um contexto VM separado, mas utiliza workers para paralelismo.

O isolamento pode aumentar significativamente os tempos de execução dos testes, o que pode não ser ideal para projetos que não dependem de efeitos colaterais e que gerenciam adequadamente a limpeza de seu estado (comum em ambientes node). Nesses casos, desabilitar o isolamento pode melhorar a velocidade dos testes. Para isso, você pode usar a flag --no-isolate na CLI ou definir a propriedade test.isolate na configuração como false. Se você estiver utilizando múltiplos pools simultaneamente com poolMatchGlobs, também é possível desabilitar o isolamento para um pool específico.

bash
vitest --no-isolate
ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    isolate: false,
    // você também pode desabilitar o isolamento apenas para pools específicos
    poolOptions: {
      forks: {
        isolate: false,
      },
    },
  },
});

TIP

Se você estiver usando o pool vmThreads, não será possível desabilitar o isolamento. Para melhorar o desempenho dos seus testes, considere usar o pool threads em vez disso.

Para alguns projetos, pode ser vantajoso desabilitar o paralelismo para otimizar o tempo de inicialização dos testes. Para isso, forneça a flag --no-file-parallelism para a CLI ou defina a propriedade test.fileParallelism na configuração como false.

bash
vitest --no-file-parallelism
ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    fileParallelism: false,
  },
});

Pool ​

Por padrão, o Vitest executa testes no pool: 'forks'. Embora o pool 'forks' seja mais adequado para resolver problemas de compatibilidade (como processos travados e segfaults), ele pode ser ligeiramente mais lento que pool: 'threads' em projetos maiores.

Você pode tentar melhorar o tempo de execução dos testes alterando a opção pool na configuração:

bash
vitest --pool=threads
ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    pool: 'threads',
  },
});

Sharding (Fragmentação) ​

Sharding de teste significa executar um pequeno subconjunto de casos de teste por vez. É útil quando se dispõe de várias máquinas que podem ser usadas para executar testes simultaneamente.

Para dividir os testes do Vitest em várias execuções diferentes, use a opção --shard em conjunto com a opção --reporter=blob:

sh
vitest run --reporter=blob --shard=1/3 # 1ª máquina
vitest run --reporter=blob --shard=2/3 # 2ª máquina
vitest run --reporter=blob --shard=3/3 # 3ª máquina

Reúna os resultados salvos no diretório .vitest-reports de cada máquina e mescle-os com a opção --merge-reports:

sh
vitest --merge-reports
Exemplo de ação do Github

Esta configuração também é utilizada em https://github.com/vitest-tests/test-sharding.

yaml
# Inspirado em https://playwright.dev/docs/test-sharding
name: Tests
on:
  push:
    branches:
      - main
jobs:
  tests:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        shardIndex: [1, 2, 3, 4]
        shardTotal: [4]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Install pnpm
        uses: pnpm/action-setup@v4

      - name: Install dependencies
        run: pnpm i

      - name: Run tests
        run: pnpm run test --reporter=blob --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}

      - name: Upload blob report to GitHub Actions Artifacts
        if: ${{ !cancelled() }}
        uses: actions/upload-artifact@v4
        with:
          name: blob-report-${{ matrix.shardIndex }}
          path: .vitest-reports/*
          include-hidden-files: true
          retention-days: 1

  merge-reports:
    if: ${{ !cancelled() }}
    needs: [tests]

    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Install pnpm
        uses: pnpm/action-setup@v4

      - name: Install dependencies
        run: pnpm i

      - name: Download blob reports from GitHub Actions Artifacts
        uses: actions/download-artifact@v4
        with:
          path: .vitest-reports
          pattern: blob-report-*
          merge-multiple: true

      - name: Merge reports
        run: npx vitest --merge-reports

TIP

O sharding de testes também pode ser útil em máquinas com muitos núcleos de CPU.

O Vitest executará apenas um único servidor Vite em sua thread principal. As demais threads são utilizadas para executar arquivos de teste. Em uma máquina com muitos núcleos de CPU, a thread principal pode se tornar um gargalo, pois não consegue lidar com todas as solicitações provenientes das threads. Por exemplo, em uma máquina com 32 CPUs, a thread principal é responsável por lidar com a carga proveniente de 31 threads de teste.

Para reduzir a carga do servidor Vite na thread principal, você pode usar o sharding de testes. A carga pode ser distribuída entre vários servidores Vite.

sh
# Exemplo para dividir testes em 32 CPUs em 4 fragmentos.
# Como cada processo precisa de 1 thread principal, há 7 threads para os executores de teste (1+7)*4 = 32
# Use VITEST_MAX_THREADS ou VITEST_MAX_FORKS dependendo do pool:
VITEST_MAX_THREADS=7 vitest run --reporter=blob --shard=1/4 & \
VITEST_MAX_THREADS=7 vitest run --reporter=blob --shard=2/4 & \
VITEST_MAX_THREADS=7 vitest run --reporter=blob --shard=3/4 & \
VITEST_MAX_THREADS=7 vitest run --reporter=blob --shard=4/4 & \
wait # https://man7.org/linux/man-pages/man2/waitpid.2.html

vitest --merge-reports
Pager
AnteriorProfiling Test Performance

Distribuído sob a Licença MIT.

Copyright (c) 2024 Mithril Contributors

https://v2.vitest.dev/guide/improving-performance

Distribuído sob a Licença MIT.

Copyright (c) 2024 Mithril Contributors