Skip to content
Vitest 3
Main Navigation Przewodnik & APIKonfiguracjaTryb przeglądarkiZaawansowane API
3.2.0
2.1.9
1.6.1
0.34.6

Polski

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

Polski

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

Wygląd

Sidebar Navigation

Wprowadzenie

Dlaczego Vitest

Pierwsze kroki

Funkcje

Konfiguracja Vitest

API

Dokumentacja API testowego

Funkcje Mock

Vi

expect

expectTypeOf

assert

assertType

Przewodnik

Interfejs Wiersza Poleceń

Filtrowanie testów

Projekty testowe

Reportery

Pokrycie kodu

Migawki

Mockowanie

Równoległość

Typy testów

Interfejs użytkownika Vitest

Testy w kodzie źródłowym

Kontekst Testu

Adnotacje testowe

Środowisko testowe

Rozszerzanie matcherów

Integracje z IDE

Debugowanie

Typowe błędy

Przewodnik migracji

Migracja do Vitest 3.0

Migracja z Jest

Wydajność

Profilowanie wydajności testów

Poprawa wydajności

Tryb przeglądarkowy

Zaawansowane API

Porównania z innymi narzędziami do uruchamiania testów

Na tej stronie

Poprawa wydajności ​

Izolacja testów ​

Domyślnie Vitest uruchamia każdy plik testowy w izolowanym środowisku, bazując na puli:

  • pula threads uruchamia każdy plik testowy w osobnym Workerze
  • pula forks uruchamia każdy plik testowy w osobnym procesie potomnym z rozgałęzieniem
  • pula vmThreads uruchamia każdy plik testowy w osobnym kontekście VM, ale wykorzystuje procesy robocze do zapewnienia równoległości

Izolacja testów może znacząco wydłużyć czas wykonywania testów. Może to być niepożądane w projektach, które nie polegają na efektach ubocznych i prawidłowo oczyszczają swój stan (co zazwyczaj dotyczy projektów w środowisku node). W takim przypadku wyłączenie izolacji przyspieszy testy. Aby to zrobić, możesz przekazać flagę --no-isolate do CLI lub ustawić właściwość test.isolate w konfiguracji na false.

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

export default defineConfig({
  test: {
    isolate: false,
    // możesz również wyłączyć izolację tylko dla konkretnych pul
    poolOptions: {
      forks: {
        isolate: false,
      },
    },
  },
});

TIP

Jeśli używasz puli vmThreads, nie możesz wyłączyć izolacji. Zamiast tego użyj puli threads, aby poprawić wydajność swoich testów.

Dla niektórych projektów może być również pożądane wyłączenie równoległości w celu poprawy czasu uruchamiania testów. Aby to zrobić, podaj flagę --no-file-parallelism do CLI lub ustaw właściwość test.fileParallelism w konfiguracji na false.

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

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

Pula ​

Domyślnie Vitest uruchamia testy w pool: 'forks'. Chociaż pula 'forks' lepiej radzi sobie z problemami kompatybilności (zawieszanie się procesów i błędy segmentacji pamięci), może być nieco wolniejsza niż pool: 'threads' w większych projektach.

Możesz spróbować skrócić czas wykonywania testów, zmieniając opcję pool w konfiguracji:

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

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

Sharding ​

Sharding testów to proces dzielenia zestawu testów na grupy, zwane shardami. Może to być przydatne, gdy masz duży zestaw testów i wiele maszyn, które mogą równocześnie uruchamiać podzbiory tego zestawu.

Aby podzielić testy Vitest na wiele oddzielnych uruchomień, użyj opcji --shard z opcją --reporter=blob:

sh
vitest run --reporter=blob --shard=1/3 # maszyna 1
vitest run --reporter=blob --shard=2/3 # maszyna 2
vitest run --reporter=blob --shard=3/3 # maszyna 3

Vitest dzieli pliki testowe na shardy, a nie przypadki testowe. Jeśli masz 1000 plików testowych, opcja --shard=1/4 uruchomi 250 plików testowych, niezależnie od liczby przypadków testowych w poszczególnych plikach.

Zbierz wyniki przechowywane w katalogu .vitest-reports z każdej maszyny i scal je, używając opcji --merge-reports:

sh
vitest run --merge-reports
Przykład akcji Github

Ta konfiguracja jest również używana na https://github.com/vitest-tests/test-sharding.

yaml
# Zainspirowane przez 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@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0

      - 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@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0

      - 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

Sharding testów może być również przydatny na maszynach z wieloma rdzeniami procesora.

Vitest uruchomi tylko jeden serwer Vite w głównym wątku. Pozostałe wątki są wykorzystywane do uruchamiania plików testowych. Na maszynie wielordzeniowej główny wątek może stać się wąskim gardłem (bottleneck), ponieważ nie jest w stanie obsłużyć wszystkich żądań z wątków testowych. Na przykład na maszynie z 32 rdzeniami CPU główny wątek jest odpowiedzialny za obsługę obciążenia od 31 wątków testowych.

Aby zmniejszyć obciążenie serwera Vite w głównym wątku, możesz użyć shardingu testów. Obciążenie może być rozłożone pomiędzy wiele serwerów Vite.

sh
# Przykład podziału testów na 32 CPU na 4 shardy.
# Ponieważ każdy proces wymaga 1 głównego wątku, dostępnych jest 7 wątków dla wykonawców testów (1+7)*4 = 32
# Użyj VITEST_MAX_THREADS lub VITEST_MAX_FORKS w zależności od wybranej puli:
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 run --merge-reports
Pager
Poprzednia stronaProfilowanie wydajności testów
Następna stronaTryb przeglądarkowy

Opublikowano na licencji MIT.

Copyright (c) 2021-Present Vitest Team

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

Opublikowano na licencji MIT.

Copyright (c) 2021-Present Vitest Team