Skip to content
Vitest 2
Main Navigation ガイドAPI設定ブラウザモード高度な
3.2.0
2.1.9
1.6.1
0.34.6

日本語

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

日本語

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

外観

Sidebar Navigation

Vitest の必要性

はじめに

特徴

ワークスペース

コマンドラインインターフェース

テストのフィルタリング

レポーター

カバレッジ

スナップショット

モック

型テスト

Vitest UI

ソース内テスト

テストコンテキスト

テスト環境

マッチャー拡張

IDE 連携機能

デバッグ

他のテストランナーとの比較

マイグレーションガイド

よくあるエラー

Profiling Test Performance

パフォーマンスの改善

このページの内容

パフォーマンスの向上 ​

テストの分離 ​

デフォルトでは、Vitest は pool に基づく分離された環境で各テストファイルを実行します。

  • threads プールは、各テストファイルを個別の Worker で実行します。
  • forks プールは、各テストファイルを個別の forked child process で実行します。
  • vmThreads プールは、各テストファイルを個別の VM context で実行しますが、並列処理にはワーカーを使用します。

この分離はテスト時間を大幅に増加させる可能性があります。しかし、副作用に依存せず、状態を適切にクリーンアップできるプロジェクト(通常は node 環境のプロジェクトに当てはまります)では、この増加は望ましくない場合があります。この場合、分離を無効にすることでテスト速度が向上します。そのためには、CLI で --no-isolate フラグを使用するか、設定ファイルで test.isolate プロパティを false に設定します。poolMatchGlobs を使用して複数のプールを同時に使用している場合は、使用している特定のプールの分離を無効にすることも可能です。

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

export default defineConfig({
  test: {
    isolate: false,
    // 特定のプールのみ分離を無効にすることもできます
    poolOptions: {
      forks: {
        isolate: false,
      },
    },
  },
});

TIP

vmThreads プールを使用している場合、分離を無効にすることはできません。テストパフォーマンスを向上させるためには、代わりに threads プールを使用してください。

一部のプロジェクトでは、起動時間を短縮するために並列処理を無効にすることが望ましい場合もあります。そのためには、CLI に --no-file-parallelism フラグを指定するか、設定で test.fileParallelism プロパティを false に設定します。

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

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

プール ​

デフォルトでは、Vitest は pool: 'forks' を使用してテストを実行します。'forks' プールは互換性の問題(ハングするプロセスやセグメンテーション違反)には優れていますが、大規模プロジェクトでは pool: 'threads' に比べて若干遅くなる場合があります。

設定で pool オプションを切り替えることで、テスト実行時間を短縮できる可能性があります。

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

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

シャーディング ​

テストシャーディングとは、一度にテストケースのごく一部を実行することを指します。これは、テストを同時に実行できる複数のマシンがある場合に有用です。

Vitest のテストを複数の異なる実行に分割するには、--shard オプションを --reporter=blob オプションと組み合わせて使用します。

sh
vitest run --reporter=blob --shard=1/3 # 1台目のマシン
vitest run --reporter=blob --shard=2/3 # 2台目のマシン
vitest run --reporter=blob --shard=3/3 # 3台目のマシン

各マシンから .vitest-reports ディレクトリに保存された結果を収集し、--merge-reports オプションで結合します。

sh
vitest --merge-reports
Github Actions の例

この設定は、https://github.com/vitest-tests/test-sharding で使用されています。

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

テストシャーディングは、CPUコア数が多いマシンでも役立ちます。

Vitest は、メインスレッドで単一の Vite サーバーのみを実行します。残りのスレッドはテストファイルの実行に使用されます。 CPUコア数が多いマシンでは、メインスレッドがボトルネックとなる可能性があります。これは、メインスレッドがすべてのスレッドからのリクエストを処理しきれないためです。たとえば、32 CPU マシンでは、メインスレッドは31のテストスレッドからの負荷を処理する役割を担います。

メインスレッドの Vite サーバーからの負荷を軽減するには、テストシャーディングを使用できます。負荷は複数の Vite サーバーに分散させることができます。

sh
# 32 CPU でテストを 4 つのシャードに分割する例。
# 各プロセスには 1 つのメインスレッドが必要なため、テストランナーには 7 つのスレッドが割り当てられます (1+7)*4 = 32
# プールに応じて VITEST_MAX_THREADS または VITEST_MAX_FORKS を使用します。
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
前のページProfiling Test Performance

MITライセンス の下で公開されています。

Copyright (c) 2021-Present Vitest Team

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

MITライセンス の下で公開されています。

Copyright (c) 2021-Present Vitest Team