Skip to content
Latchkey

O Que É Sharding de Testes?

O sharding de testes divide uma suíte de testes em fatias independentes que rodam em máquinas ou jobs separados ao mesmo tempo.

O sharding é a paralelização em nível de máquina. Em vez de rodar todos os testes em um runner, você divide a suíte em shards, fatia 1 de 4, fatia 2 de 4, e assim por diante, e roda cada uma em seu próprio runner simultaneamente. O tempo de relógio cai para aproximadamente o do shard mais lento, não importa quão grande a suíte cresça.

Como o sharding funciona

Você diz ao test runner o número total de shards e qual shard é este job. O runner atribui deterministicamente um subconjunto de testes a cada shard, de modo que cada teste rode exatamente uma vez em todo o conjunto. Quatro shards, rodados em quatro runners, terminam em cerca de um quarto do tempo em série.

Balanceando os shards

Uma divisão ingênua, por arquivo ou alfabeticamente, pode deixar um shard com todos os testes lentos enquanto os outros ficam ociosos. Estratégias mais inteligentes dividem por timing histórico para que cada shard leve aproximadamente o mesmo tempo de relógio. Uma divisão balanceada é o que aproxima você do ganho de velocidade ideal.

Um exemplo rápido

Um runner recebe o índice do shard e o total, para que rode apenas sua fatia da suíte.

Running one shard of four
playwright test --shard=2/4   # this job runs slice 2 of 4
jest --shard=2/4

Sharding versus paralelização

  • Sharding: dividir entre jobs ou máquinas separados.
  • Paralelização: rodar concorrentemente dentro de um único job.
  • Eles se empilham: shard entre runners, paralelize dentro de cada um.
  • Ambos exigem testes isolados e independentes de ordem.

Sharding de testes no CI

Uma matrix de CI sobe um job por shard, cada um em seu próprio runner, para que uma suíte longa termine no tempo de seu shard mais lento. O ganho de velocidade escala com quantos runners rápidos você conseguir usar. A Latchkey torna isso barato ao rodar shards em paralelo em runners rápidos e gerenciados.

Principais conclusões

  • O sharding divide uma suíte entre máquinas para rodar fatias em paralelo.
  • Balancear shards por timing chega perto do ganho de velocidade ideal.
  • Uma matrix de CI roda um shard por runner para terminar suítes grandes rápido.

Guias relacionados