Testes: testes em paralelo
A suíte de specs deste app tem 205 arquivos e 1.219 exemplos. Ela roda num processo só, em cerca de 1 minuto e 19 segundos. O curso analisa se rodá-la em paralelo ajudaria. Primeiro vem o ActiveSupport::TestCase.parallelize do Minitest e o motivo de ele não ter o que rodar aqui. Depois vem a gem separada parallel_tests para o RSpec e o jeito como ela agrupa arquivos por tamanho ou tempo. Seguem a convenção de banco TEST_ENV_NUMBER, uma análise de custos e um pequeno desafio de balanceamento em Ruby puro.
O que você vai aprender
- ✓Como o parallelize do Minitest funciona com processos, threads e o limite de 50 testes
- ✓Por que o rspec-core não tem executor paralelo e o que a gem parallel_tests traz
- ✓Como a parallel_tests agrupa arquivos de spec inteiros por filesize ou runtime
- ✓A convenção TEST_ENV_NUMBER para um banco de teste por processo
- ✓Como comparar custos fixos, como carregamento de arquivos e preparação de bancos, com o tempo economizado
A suíte de specs deste app, cronometrada, roda num processo só
Essa é a suíte de specs deste app, rodada para este curso: 205 arquivos de spec e 1.219 exemplos. O RSpec mostra 1 minuto e 19,03 segundos de execução. Carregar os arquivos antes, com require de cada spec, factory e arquivo de suporte antes de qualquer exemplo rodar, levou mais 2,87 segundos. Todo…
Ler a aula completa grátis →Currículo
7 aulasA suíte de specs deste app, cronometrada, roda num processo só
Cronometra a suíte RSpec deste app, com 205 arquivos e 1.219 exemplos, rodando num processo só, fora do CI.
O parallelize embutido do Minitest: instalado, mas sem nada para rodar aqui
Lê o código do parallelize do Minitest, seus modos de processo e thread, o limite de 50 testes e por que não serve aqui.
A resposta do RSpec é uma gem separada, não algo embutido
Mostra que o rspec-core não tem executor paralelo e apresenta a gem separada parallel_tests e o comando parallel_rspec.
Como a parallel_tests decide que arquivos vão para qual processo
Explica como a parallel_tests agrupa arquivos de spec inteiros por filesize ou runtime, diferente da divisão por método do Minitest.
TEST_ENV_NUMBER: um banco por processo
Trata da convenção TEST_ENV_NUMBER, com um banco por processo, e de por que o database.yml deste app não a segue.
Paralelizar a suíte deste app ajuda, no tamanho atual?
Compara o tempo desta suíte com o benchmark da gem e pesa os custos fixos de carregamento e preparação de bancos.
Juntando tudo: dois mecanismos, uma medição
Retoma os dois mecanismos e suas fontes e propõe um desafio em Ruby puro que distribui trabalho desigual entre workers.