Skip to content
Vitest 3
Main Navigation Guia & APIConfiguraçãoModo NavegadorAPI Avançada
3.2.0
2.1.9
1.6.1
0.34.6

Português – Brasil

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

Português – Brasil

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

Aparência

Sidebar Navigation

Introdução

Por que Vitest

Primeiros Passos

Recursos

Configurando o Vitest

API

Referência da API de Teste

Funções Mock

Vi

expect

expectTypeOf

assert

assertType

Guia

Interface de Linha de Comando

Filtragem de Testes

Projetos de Teste

Reporters

Cobertura

Snapshot

Mocking

Paralelismo

Testando Tipos

Vitest UI

Testes no Código-Fonte

Contexto de Testes

Anotações em Testes

Ambiente de Teste

Estendendo Matchers

Integrações com IDEs

Depuração

Erros Comuns

Guia de Migração

Migrando para o Vitest 3.0

Migrando do Jest

Desempenho

Análise de Desempenho de Testes

Melhorando o Desempenho

Modo Navegador

APIs Avançadas

Comparações com Outros Test Runners

Nesta página

Análise de Desempenho de Testes ​

Ao executar o Vitest, ele reporta diversas métricas de tempo dos seus testes:

bash
RUN  v2.1.1 /x/vitest/examples/profiling

✓ test/prime-number.test.ts (1) 4517ms
  ✓ generate prime number 4517ms

Test Files  1 passed (1)
     Tests  1 passed (1)
  Start at  09:32:53
  Duration  4.80s (transform 44ms, setup 0ms, collect 35ms, tests 4.52s, environment 0ms, prepare 81ms)
  # Time metrics ^^
  • Transform: Tempo gasto na transformação dos arquivos. Veja Transformação de Arquivos.
  • Setup: Tempo gasto para executar os arquivos setupFiles.
  • Collect: Tempo gasto para coletar todos os testes nos arquivos de teste. Isso inclui o tempo de importação de todas as dependências dos arquivos.
  • Tests: Tempo gasto na execução dos casos de teste.
  • Environment: Tempo gasto para configurar o environment de teste, por exemplo, JSDOM.
  • Prepare: Tempo utilizado pelo Vitest para preparar o executor de testes.

Executor de Testes ​

Quando o tempo de execução dos testes estiver elevado, você pode gerar um perfil do executor de testes. Consulte a documentação do Node.js para as seguintes opções:

  • --cpu-prof
  • --heap-prof
  • --prof

WARNING

A opção --prof não funciona com pool: 'threads' devido a limitações de node:worker_threads.

Para passar essas opções ao executor de testes do Vitest, defina poolOptions.<pool>.execArgv na sua configuração do Vitest:

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    pool: 'forks',
    poolOptions: {
      forks: {
        execArgv: [
          '--cpu-prof',
          '--cpu-prof-dir=test-runner-profile',
          '--heap-prof',
          '--heap-prof-dir=test-runner-profile',
        ],

        // Para gerar um perfil único
        singleFork: true,
      },
    },
  },
});
ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    pool: 'threads',
    poolOptions: {
      threads: {
        execArgv: [
          '--cpu-prof',
          '--cpu-prof-dir=test-runner-profile',
          '--heap-prof',
          '--heap-prof-dir=test-runner-profile',
        ],

        // Para gerar um perfil único
        singleThread: true,
      },
    },
  },
});

Após a execução dos testes, serão gerados arquivos test-runner-profile/*.cpuprofile e test-runner-profile/*.heapprofile. Consulte Inspecionando Registros de Perfil para obter instruções sobre como analisar esses arquivos.

Veja Profiling | Examples para um exemplo.

Thread Principal ​

A análise de desempenho da thread principal é útil para depurar o uso do Vite pelo Vitest e os arquivos globalSetup. É também onde seus plugins do Vite são executados.

TIP

Consulte Performance | Vite para mais dicas sobre análise de desempenho específica do Vite.

Recomendamos vite-plugin-inspect para criar o perfil do desempenho do seu plugin Vite.

Para isso, será necessário passar argumentos para o processo Node que executa o Vitest.

bash
$ node --cpu-prof --cpu-prof-dir=main-profile ./node_modules/vitest/vitest.mjs --run
#      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                  ^^^^^
#               Argumentos do Node.js                                          Argumentos do Vitest

Após a execução dos testes, um arquivo main-profile/*.cpuprofile deve ser gerado. Consulte Inspecionando Registros de Perfil para obter instruções sobre como analisar esses arquivos.

Transformação de Arquivos ​

Nos casos em que o tempo de transformação e coleta do seu teste é alto, você pode usar a variável de ambiente DEBUG=vite-node:* para ver quais arquivos são transformados e executados pelo vite-node.

bash
$ DEBUG=vite-node:* vitest --run

 RUN  v2.1.1 /x/vitest/examples/profiling

  vite-node:server:request /x/vitest/examples/profiling/global-setup.ts +0ms
  vite-node:client:execute /x/vitest/examples/profiling/global-setup.ts +0ms
  vite-node:server:request /x/vitest/examples/profiling/test/prime-number.test.ts +45ms
  vite-node:client:execute /x/vitest/examples/profiling/test/prime-number.test.ts +26ms
  vite-node:server:request /src/prime-number.ts +9ms
  vite-node:client:execute /x/vitest/examples/profiling/src/prime-number.ts +9ms
  vite-node:server:request /src/unnecessary-file.ts +6ms
  vite-node:client:execute /x/vitest/examples/profiling/src/unnecessary-file.ts +4ms
...

Essa estratégia de análise de desempenho é uma boa forma de identificar transformações desnecessárias causadas por barrel files. Se esses logs contiverem arquivos que não deveriam ser carregados quando seu teste é executado, você pode ter barrel files que importam arquivos desnecessariamente.

Você também pode usar a Vitest UI para depurar a lentidão causada por barrel files. O exemplo abaixo mostra como importar arquivos sem barrel file reduz a quantidade de arquivos transformados em aproximadamente 85%.

├── src
│   └── utils
│       ├── currency.ts
│       ├── formatters.ts  <-- Arquivo a ser testado
│       ├── index.ts
│       ├── location.ts
│       ├── math.ts
│       ├── time.ts
│       └── users.ts
├── test
│   └── formatters.test.ts
└── vitest.config.ts
ts
import { expect, test } from 'vitest';
import { formatter } from '../src/utils'; 
import { formatter } from '../src/utils/formatters'; 

test('formatter works', () => {
  expect(formatter).not.toThrow();
});
Vitest UI demonstrando problemas de barrel file

Para visualizar como os arquivos são transformados, você pode usar a variável de ambiente VITE_NODE_DEBUG_DUMP para salvar os arquivos transformados no sistema de arquivos:

bash
$ VITE_NODE_DEBUG_DUMP=true vitest --run

[vite-node] [debug] dump modules to /x/examples/profiling/.vite-node/dump

 RUN  v2.1.1 /x/vitest/examples/profiling
...

$ ls .vite-node/dump/
_x_examples_profiling_global-setup_ts-1292904907.js
_x_examples_profiling_test_prime-number_test_ts-1413378098.js
_src_prime-number_ts-525172412.js

Cobertura de Código ​

Se a geração do relatório de cobertura estiver lenta no seu projeto, você pode usar a variável de ambiente DEBUG=vitest:coverage para habilitar os logs de desempenho.

bash
$ DEBUG=vitest:coverage vitest --run --coverage

 RUN  v3.1.1 /x/vitest-example

  vitest:coverage Reading coverage results 2/2
  vitest:coverage Converting 1/2
  vitest:coverage 4 ms /x/src/multiply.ts
  vitest:coverage Converting 2/2
  vitest:coverage 552 ms /x/src/add.ts
  vitest:coverage Uncovered files 1/2
  vitest:coverage File "/x/src/large-file.ts" is taking longer than 3s
  vitest:coverage 3027 ms /x/src/large-file.ts
  vitest:coverage Uncovered files 2/2
  vitest:coverage 4 ms /x/src/untested-file.ts
  vitest:coverage Generate coverage total time 3521 ms

Essa abordagem de análise é excelente para detectar arquivos grandes que são acidentalmente incluídos pelos provedores de cobertura. Por exemplo, se sua configuração estiver incluindo acidentalmente grandes arquivos Javascript minificados na cobertura de código, eles aparecerão nos logs. Nesses casos, você pode precisar ajustar suas opções coverage.include e coverage.exclude.

Inspecionando Registros de Perfil ​

Você pode inspecionar o conteúdo de *.cpuprofile e *.heapprofile com várias ferramentas. Veja a lista abaixo com exemplos.

  • Speedscope
  • Performance Profiling JavaScript in Visual Studio Code
  • Profile Node.js performance with the Performance panel | developer.chrome.com
  • Memory panel overview | developer.chrome.com
Pager
AnteriorGuia de Migração
PróximoMelhorando o Desempenho

Distribuído sob a Licença MIT.

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/guide/profiling-test-performance

Distribuído sob a Licença MIT.

Copyright (c) 2021-Present Vitest Team