Skip to content
Latchkey

O Que É Paralelização de Testes?

A paralelização de testes roda múltiplos testes ao mesmo tempo em vez de um após o outro, reduzindo o tempo total que uma suíte leva.

Uma suíte que roda em série leva o tempo equivalente à soma de todos os seus testes. A paralelização roda muitos testes de uma vez, entre threads, processos ou máquinas, para que a suíte termine em uma fração desse tempo. O detalhe é que os testes paralelos não podem interferir uns nos outros, o que faz do isolamento o requisito central.

Como ela acelera as coisas

Se uma suíte de 1.000 testes leva dez minutos em série, rodá-la em dez workers paralelos pode aproximá-la de um minuto. O ganho de velocidade é limitado pelo teste único mais lento e por quão uniformemente o trabalho se divide, mas para suítes grandes o ganho é dramático.

O requisito de isolamento

Testes rodando ao mesmo tempo podem colidir sobre recursos compartilhados, a mesma linha de banco de dados, o mesmo arquivo, a mesma porta. A paralelização só funciona se cada teste for isolado, com seu próprio estado e sem dependências globais ocultas. Testes que dependem de ordem ou de estado mutável compartilhado quebram sob paralelismo.

Um exemplo rápido

A maioria dos test runners expõe uma flag para definir o número de workers paralelos, dividindo a suíte entre eles automaticamente.

Running tests in parallel
pytest -n 8        # run across 8 worker processes
jest --maxWorkers=8

Paralelização versus sharding

  • Paralelização: muitos testes de uma vez dentro de uma execução.
  • Sharding: dividir a suíte entre máquinas ou jobs separados.
  • Os dois se combinam: shard entre runners, paralelize dentro de cada um.
  • Ambos dependem de testes isolados e independentes de ordem.

Paralelização de testes no CI

O CI é onde a paralelização mais compensa, porque suítes longas atrasam todo merge. Dividir os testes entre muitos runners rápidos e rodá-los concorrentemente dentro de cada um pode transformar uma suíte de dez minutos em uma de um minuto. A Latchkey é construída exatamente em torno disso: rodar testes em paralelo em runners rápidos para manter o CI ágil.

Principais conclusões

  • A paralelização roda testes concorrentemente para reduzir o tempo de relógio.
  • Ela exige testes isolados e independentes de ordem para evitar colisões.
  • Combinada com sharding, faz suítes grandes de CI terminarem rápido.

Guias relacionados