Passer au contenu

Améliorer la performance

Isolation des tests

Par défaut, Vitest exécute chaque fichier de test dans un environnement isolé basé sur le pool :

  • Le pool threads exécute chaque fichier de test dans un Worker séparé.
  • Le pool forks exécute chaque fichier de test dans un processus enfant forké séparé.
  • Le pool vmThreads exécute chaque fichier de test dans un contexte VM séparé, mais il utilise des workers pour le parallélisme.

Cela augmente considérablement les temps de test, ce qui peut ne pas être souhaitable pour les projets qui ne dépendent pas des effets de bord et nettoient correctement leur état (ce qui est généralement vrai pour les projets avec un environnement node). Dans ce cas, désactiver l’isolation améliorera la vitesse de vos tests. Pour cela, vous pouvez fournir le drapeau --no-isolate à la CLI ou définir la propriété test.isolate dans la configuration à false. Si vous utilisez plusieurs pools en même temps avec poolMatchGlobs, vous pouvez également désactiver l’isolation pour un pool spécifique que vous utilisez.

Fenêtre de terminal
vitest --no-isolate

Pour certains projets, il peut également être souhaitable de désactiver le parallélisme pour améliorer le temps de démarrage. Pour cela, fournissez le drapeau --no-file-parallelism à la CLI ou définissez la propriété test.fileParallelism dans la configuration à false.

Fenêtre de terminal
vitest --no-file-parallelism

Pool

Par défaut, Vitest exécute des tests dans pool: 'forks'. Bien que le pool 'forks' soit meilleur pour les problèmes de compatibilité (processus en attente et segfaults), il peut être légèrement plus lent que pool: 'threads' dans des projets plus vastes.

Vous pouvez tenter d’améliorer le temps d’exécution des tests en changeant l’option pool dans la configuration :

Fenêtre de terminal
vitest --pool=threads

Sharding

Le sharding des tests signifie exécuter un petit sous-ensemble de cas de test à la fois. Cela peut être utile lorsque vous avez plusieurs machines qui pourraient être utilisées pour exécuter des tests simultanément.

Pour diviser les tests Vitest en plusieurs exécutions différentes, utilisez l’option --shard avec l’option --reporter=blob :

Fenêtre de terminal
vitest run --reporter=blob --shard=1/3 # 1ère machine
vitest run --reporter=blob --shard=2/3 # 2ème machine
vitest run --reporter=blob --shard=3/3 # 3ème machine

Collectez les résultats stockés dans le répertoire .vitest-reports de chaque machine et fusionnez-les avec l’option --merge-reports :

Fenêtre de terminal
vitest --merge-reports
Exemple d’action Github

Cette configuration est également utilisée sur https://github.com/vitest-tests/test-sharding.

# Inspiré de 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: Installer pnpm
uses: pnpm/action-setup@v4
- name: Installer les dépendances
run: pnpm i
- name: Exécuter les tests
run: pnpm run test --reporter=blob --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
- name: Télécharger le rapport blob dans les artefacts des actions GitHub
if: ${{ !cancelled() }}
uses: actions/upload-artifact@v4
with:
name: blob-report-${{ matrix.shardIndex }}
path: .vitest-reports/*
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: Installer pnpm
uses: pnpm/action-setup@v4
- name: Installer les dépendances
run: pnpm i
- name: Télécharger les rapports blob des artefacts des actions GitHub
uses: actions/download-artifact@v4
with:
path: .vitest-reports
pattern: blob-report-*
merge-multiple: true
- name: Fusionner les rapports
run: npx vitest --merge-reports