Skip to content
Vitest 2
Main Navigation LeitfadenAPIKonfigurationBrowser-ModusFortgeschritten
2.1.9
1.6.1
0.34.6

Deutsch

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

Deutsch

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

Aussehen

Sidebar Navigation

Warum Vitest

Erste Schritte

Features

Arbeitsbereich

Kommandozeilenschnittstelle

Testfilter

Reporter

Codeabdeckung (Coverage)

Snapshot

Mocking

Typen testen

Vitest UI

In-Source-Testing

Testkontext

Testumgebung

Erweiterung von Matchern

IDE-Integration

Debugging

Vergleiche mit anderen Test-Runnern

Migrationsleitfaden

Häufige Fehler

Profiling Test Performance

Leistungsverbesserung

Auf dieser Seite

Leistungsoptimierung ​

Testisolation ​

Vitest führt standardmäßig jede Testdatei in einer isolierten Umgebung aus, basierend auf dem Pool:

  • Der threads-Pool nutzt für jede Testdatei einen separaten Worker.
  • Der forks-Pool nutzt für jede Testdatei einen separaten abgespalteten Child-Prozess.
  • Der vmThreads-Pool nutzt für jede Testdatei einen separaten VM-Kontext, verwendet jedoch Worker für die Parallelisierung.

Diese Isolation kann die Testdauer erheblich verlängern. Für Projekte, die keine unerwünschten Nebeneffekte erzeugen und ihren Zustand ordnungsgemäß bereinigen (was typischerweise auf Projekte in einer node-Umgebung zutrifft), ist dies möglicherweise nicht wünschenswert. In solchen Fällen kann das Deaktivieren der Isolation die Testleistung verbessern. Dazu können Sie das Flag --no-isolate in der CLI angeben oder die Eigenschaft test.isolate in der Konfiguration auf false setzen. Wenn Sie mehrere Pools gleichzeitig mit poolMatchGlobs verwenden, können Sie die Isolation auch gezielt für einen bestimmten Pool deaktivieren.

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

export default defineConfig({
  test: {
    isolate: false,
    // Sie können die Isolation auch nur für bestimmte Pools deaktivieren
    poolOptions: {
      forks: {
        isolate: false,
      },
    },
  },
});

TIP

Wenn Sie den vmThreads-Pool verwenden, kann die Isolation nicht deaktiviert werden. Um die Testleistung zu verbessern, sollten Sie stattdessen den threads-Pool nutzen.

Bei einigen Projekten kann es auch sinnvoll sein, die Parallelität zu deaktivieren, um die Startzeit der Tests zu verbessern. Dazu geben Sie das Flag --no-file-parallelism in der CLI an oder setzen die Eigenschaft test.fileParallelism in der Konfiguration auf false.

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

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

Pool ​

Standardmäßig verwendet Vitest den 'forks'-Pool für Tests. Obwohl der 'forks'-Pool bei Kompatibilitätsproblemen (wie hängenden Prozessen und Speicherzugriffsfehlern) vorteilhafter ist, kann er in größeren Projekten etwas langsamer sein als der 'threads'-Pool.

Sie können die Testlaufzeit verbessern, indem Sie die pool-Option in der Konfiguration ändern:

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

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

Sharding ​

Test-Sharding bedeutet die gleichzeitige Ausführung einer Teilmenge von Testfällen. Dies kann nützlich sein, wenn Sie Tests parallel auf mehreren Maschinen ausführen möchten.

Um Vitest-Tests auf mehrere separate Läufe aufzuteilen, verwenden Sie die Option --shard zusammen mit der Option --reporter=blob:

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

Sammeln Sie die im .vitest-reports-Verzeichnis gespeicherten Ergebnisse von jeder Maschine und führen Sie sie mit der Option --merge-reports zusammen:

sh
vitest --merge-reports
Beispiel für eine GitHub Action

Dieses Setup wird auch unter https://github.com/vitest-tests/test-sharding verwendet.

yaml
# Inspiriert von 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

Test-Sharding kann auch auf Maschinen mit vielen CPUs nützlich sein.

Vitest betreibt nur einen einzigen Vite-Server in seinem Haupt-Thread. Die übrigen Threads dienen der Ausführung von Testdateien. Auf einer Maschine mit vielen CPUs kann der Haupt-Thread zum Flaschenhals werden, da er möglicherweise nicht alle Anfragen der Test-Threads effizient verarbeiten kann. Zum Beispiel ist auf einer Maschine mit 32 CPUs der Haupt-Thread dafür verantwortlich, die Last von 31 Test-Threads zu bewältigen.

Um die Last des Vite-Servers im Haupt-Thread zu reduzieren, können Sie Test-Sharding verwenden. Dies ermöglicht die Verteilung der Last auf mehrere Vite-Server.

sh
# Beispiel für die Aufteilung von Tests auf 32 CPUs in 4 Shards.
# Da jeder Prozess einen Haupt-Thread benötigt, stehen 7 Threads für Test-Runner zur Verfügung (1+7)*4 = 32
# Verwenden Sie VITEST_MAX_THREADS oder VITEST_MAX_FORKS, abhängig vom verwendeten 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
Vorherige SeiteProfiling Test Performance

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors

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

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors