Skip to content
Vitest 2
Main Navigation PrůvodceAPIKonfiguraceRežim prohlížečePokročilý
3.2.0
2.1.9
1.6.1
0.34.6

čeština

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

čeština

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

Vzhled

Sidebar Navigation

Proč Vitest

Začínáme

Funkce

Workspace

Rozhraní příkazového řádku

Filtrování testů

Reportéři

Pokrytí

Snímky

Mockování

Testování typů

Vitest UI

Testování ve zdrojovém kódu

Kontext testu

Testovací prostředí

Rozšíření matcherů/porovnávačů

Integrace do IDE

Ladění

Srovnání s jinými testovacími nástroji

Průvodce migrací

Běžné chyby

Profiling Test Performance

Zvýšení výkonu

Na této stránce

Zlepšení výkonu ​

Izolace testů ​

Vitest ve výchozím nastavení spouští každý testovací soubor v izolovaném prostředí, v závislosti na nastavení poolu:

  • pool threads spouští každý testovací soubor v samostatném Workeru.
  • pool forks spouští každý testovací soubor v samostatném forkovaném podřízeném procesu.
  • pool vmThreads spouští každý testovací soubor v samostatném VM kontextu, ale pro paralelismus využívá workery.

Tato izolace může výrazně prodloužit dobu testování, což nemusí být žádoucí pro projekty, které se nespoléhají na vedlejší účinky a správně uklízejí svůj stav (což je typické pro projekty běžící v prostředí node). V takovém případě můžete vypnutím izolace zlepšit rychlost vašich testů. Toho lze dosáhnout použitím příznaku --no-isolate v CLI nebo nastavením vlastnosti test.isolate v konfiguraci na false. Pokud používáte více poolů najednou s poolMatchGlobs, můžete izolaci zakázat i pro konkrétní pool.

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

export default defineConfig({
  test: {
    isolate: false,
    // izolaci můžete zakázat pouze pro konkrétní pooly
    poolOptions: {
      forks: {
        isolate: false,
      },
    },
  },
});

TIP

Pokud používáte pool vmThreads, izolaci nelze zakázat. Pro zlepšení výkonu testů místo toho zvažte použití poolu threads.

Pro některé projekty může být také žádoucí zakázat paralelismus pro zlepšení doby spuštění. Toho lze dosáhnout zadáním příznaku --no-file-parallelism v CLI nebo nastavením vlastnosti test.fileParallelism v konfiguraci na false.

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

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

Pool ​

Vitest ve výchozím nastavení spouští testy v pool: 'forks'. Zatímco pool 'forks' je vhodnější pro řešení problémů s kompatibilitou (jako jsou zavěšené procesy a segfaulty), u větších projektů může být o něco pomalejší než pool: 'threads'.

Dobu běhu testů můžete zlepšit přepnutím možnosti pool v konfiguraci:

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

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

Sharding ​

Sharding testů znamená spouštění malé podmnožiny testovacích případů v daném okamžiku. Může to být užitečné, když máte k dispozici více strojů, které lze použít ke spouštění testů současně.

Chcete-li rozdělit testy Vitest do více různých běhů, použijte možnost --shard společně s možností --reporter=blob:

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

Shromážděte výsledky uložené v adresáři .vitest-reports z každého stroje a slučte je pomocí možnosti --merge-reports:

sh
vitest --merge-reports
Příklad GitHub Actions

Toto nastavení se také používá na adrese https://github.com/vitest-tests/test-sharding.

yaml
# Inspirováno podle 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

Sharding testů je užitečný i na strojích s vysokým počtem CPU.

Vitest spustí pouze jeden Vite server ve svém hlavním vlákně. Ostatní vlákna se používají ke spouštění testovacích souborů. Na stroji s vysokým počtem CPU se hlavní vlákno může stát úzkým hrdlem, protože nedokáže zpracovat všechny požadavky přicházející z testovacích vláken. Například na stroji s 32 CPU je hlavní vlákno zodpovědné za zpracování zátěže přicházející z 31 testovacích vláken.

Pro snížení zátěže z Vite serveru hlavního vlákna můžete použít sharding testů. Zátěž může být rozložena mezi více Vite serverů.

sh
# Příklad rozdělení testů na 32 CPU na 4 shardy.
# Jelikož každý proces potřebuje 1 hlavní vlákno, zbývá 7 vláken pro spouštěče testů (1+7)*4 = 32
# Použijte VITEST_MAX_THREADS nebo VITEST_MAX_FORKS v závislosti na poolu:
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
Předchozí stránkaProfiling Test Performance

Vydáno pod licencí MIT.

Copyright (c) 2021-Present Vitest Team

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

Vydáno pod licencí MIT.

Copyright (c) 2021-Present Vitest Team