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.
pytest -n 8 # run across 8 worker processes
jest --maxWorkers=8Paralelizaçã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.