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 참조

Mock 함수

Vi

expect

expectTypeOf

assert

assertType

가이드

명령줄 인터페이스

테스트 필터링

테스트 프로젝트

리포터

커버리지

스냅샷

모킹

병렬 처리

타입 검사

Vitest UI

소스 내 테스팅

테스트 컨텍스트

테스트 어노테이션

테스트 환경

매처 확장하기

IDE 통합

디버깅

일반적인 오류

마이그레이션 가이드

Vitest 3.0으로 마이그레이션

Jest에서 마이그레이션

성능

테스트 성능 프로파일링

성능 향상

브라우저 모드

고급 API

다른 테스트 러너와의 비교

이 페이지에서

성능 향상 ​

테스트 격리 ​

기본적으로 Vitest는 풀 설정에 따라 모든 테스트 파일을 격리된 환경에서 실행합니다.

  • threads 풀은 각 테스트 파일을 별도의 Worker에서 실행합니다.
  • forks 풀은 각 테스트 파일을 별도의 포크된 자식 프로세스에서 실행합니다.
  • vmThreads 풀은 별도의 VM 컨텍스트에서 테스트 파일을 실행하며, 병렬 처리를 위해 워커를 활용합니다.

이러한 격리 방식은 테스트 시간을 상당히 증가시킬 수 있으며, 특히 사이드 이펙트에 의존하지 않고 상태를 적절히 정리하는 프로젝트(일반적으로 node 환경을 사용하는 프로젝트)에는 불필요할 수 있습니다. 이 경우 격리 기능을 비활성화하면 테스트 속도를 향상시킬 수 있습니다. 이를 위해 CLI에 --no-isolate 플래그를 사용하거나, Vitest 설정 파일에서 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 풀을 사용하세요.

일부 프로젝트에서는 시작 시간을 단축하기 위해 파일 병렬 처리를 비활성화하는 것이 더 유리할 수 있습니다. 이를 위해 CLI에 --no-file-parallelism 플래그를 제공하거나, Vitest 설정 파일에서 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'보다 약간 느릴 수 있습니다.

Vitest 설정 파일에서 pool 옵션을 변경하여 테스트 실행 시간을 개선할 수 있습니다.

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

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

샤딩 ​

테스트 샤딩은 전체 테스트 스위트를 여러 그룹 또는 샤드로 분할하는 프로세스입니다. 이는 대규모 테스트 스위트를 가지고 있고, 해당 스위트의 하위 집합을 동시에 실행할 수 있는 여러 대의 머신이 있을 때 특히 유용합니다.

Vitest 테스트를 여러 번 실행하여 분할하려면 --reporter=blob 옵션과 함께 --shard 옵션을 사용하세요.

sh
vitest run --reporter=blob --shard=1/3 # 첫 번째 머신
vitest run --reporter=blob --shard=2/3 # 두 번째 머신
vitest run --reporter=blob --shard=3/3 # 세 번째 머신

Vitest는 테스트 케이스가 아닌 _테스트 파일_을 샤드로 분할합니다. 예를 들어, 1000개의 테스트 파일이 있는 경우 --shard=1/4 옵션은 개별 파일에 포함된 테스트 케이스 수와 관계없이 250개의 테스트 파일을 실행합니다.

각 머신의 .vitest-reports 디렉토리에 저장된 결과를 수집한 후, --merge-reports 옵션을 사용하여 병합합니다.

sh
vitest run --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@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

테스트 샤딩은 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 run --merge-reports
Pager
이전테스트 성능 프로파일링
다음브라우저 모드

MIT 라이선스 하에 배포되었습니다.

Copyright (c) 2021-Present Vitest Team

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

MIT 라이선스 하에 배포되었습니다.

Copyright (c) 2021-Present Vitest Team