Skip to content
Vitest 3
Main Navigation Руководство & APIКонфигурацияРежим браузераРасширенный 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

API

Справочник по API тестирования

Мок-функции

Vi

expect

expectTypeOf

assert

assertType

Руководство

Интерфейс командной строки

Фильтрация тестов

Тестовые проекты

Средства отчётности

Покрытие кода

Снапшот-тестирование

Мокирование

Параллелизм

Тестирование типов

Vitest UI

Тестирование в исходном коде

Контекст теста

Аннотации тестов

Среда тестирования

Расширение матчеров

Интеграции с IDE

Отладка

Распространенные ошибки

Руководство по миграции

Миграция на Vitest 3.0

Миграция с Jest

Производительность

Профилирование производительности тестов

Улучшение производительности

Режим браузера

Расширенный API

Сравнение с другими тестовыми раннерами

Содержание страницы

Улучшение производительности ​

Изоляция тестов ​

По умолчанию Vitest запускает каждый тестовый файл в изолированной среде, основанной на пуле:

  • Пул threads запускает каждый тестовый файл в отдельном Worker.
  • Пул forks запускает каждый тестовый файл в отдельном дочернем процессе.
  • Пул vmThreads запускает каждый тестовый файл в отдельном контексте VM, но использует воркеры для параллельного выполнения.

Использование изоляции значительно увеличивает время выполнения тестов, что может быть нежелательно для проектов, которые не зависят от побочных эффектов и правильно очищают свое состояние (что обычно характерно для проектов с окружением node). В таких случаях отключение изоляции позволит ускорить выполнение тестов. Для этого можно передать флаг --no-isolate в CLI или установить свойство test.isolate в конфигурации на false.

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

export default defineConfig({
  test: {
    isolate: false,
    // Можно также отключить изоляцию только для определённых пулов
    poolOptions: {
      forks: {
        isolate: false,
      },
    },
  },
});

TIP

Если вы используете пул vmThreads, вы не можете отключить изоляцию. Для повышения производительности тестов используйте вместо него пул threads.

Для некоторых проектов также может быть желательно отключить параллелизм для сокращения времени запуска. Для этого передайте флаг --no-file-parallelism в CLI или установите свойство 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 разделяет ваши тестовые файлы, а не тестовые случаи, на шарды. Если у вас 1000 тестовых файлов, опция --shard=1/4 запустит 250 тестовых файлов, независимо от того, сколько тестовых случаев содержится в отдельных файлах.

Соберите результаты, хранящиеся в каталоге .vitest-reports с каждой из машин, и объедините их с помощью опции --merge-reports:

sh
vitest run --merge-reports
Github action example

Эта настройка также используется по адресу https://github.com/vitest-tests/test-sharding.

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

Шардирование тестов также может быть полезно на машинах с большим числом ядер ЦП.

Vitest будет запускать только один сервер Vite в своем основном потоке. Остальные потоки используются для выполнения тестовых файлов. На машине с большим количеством ядер ЦП основной поток может стать узким местом, так как он не может обрабатывать все запросы, поступающие от потоков. Например, на 32-ядерной машине основной поток отвечает за обработку нагрузки, поступающей от 31 тестового потока.

Чтобы уменьшить нагрузку на сервер Vite основного потока, вы можете использовать шардирование тестов. Нагрузка может быть распределена между несколькими серверами Vite.

sh
# Пример разделения тестов на 32 ЦП на 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 run --merge-reports
Pager
Предыдущая страницаПрофилирование производительности тестов
Следующая страницаРежим браузера

Выпущено на условиях лицензии MIT.

Авторские права (c) 2021-Present Vitest Team

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

Выпущено на условиях лицензии MIT.

Авторские права (c) 2021-Present Vitest Team