testes ruby paralelos com o parallel_tests (com benchmarks)
O Mailee tem uma cobertura muito legal de testes, o que nos ajuda bastante na hora de refatorar código e implementar novos recursos. Mas estamos num ponto em que os testes demoram muito pra rodar, e isso é bem chato.
Hoje resolvi instalar o parallel_tests. A idéia é muito legal, ele roda um processo para cada núcleo de processamento, e divide os testes entre os processos. Além disso, ele soluciona o problema de locks e transações no banco de dados usando um banco para cada processo.
Esse é o resultado de uns benchmarks que eu fiz usando os testes do Mailee rodando em um Core 2 Duo 2.33 GHz e 3.2 GB de RAM.
rake test:functionals
Finished in 223.114332 seconds.
rake "parallel:test[functional]"
Took 131.64845 seconds
rake test:units
Finished in 43.222583 seconds.
rake "parallel:test[unit]"
Took 36.4595 seconds
Os testes de integração eu omiti pois só temos um teste, aí não tira vantagem.
É bem simples de usar, precisam só algumas mudancinhas:
- mudar o config/database.yml
test: database: xxx_test<%= ENV['TEST_ENV_NUMBER'] %>
create database xxx_test2;
É preciso criar até o banco número 4, caso a máquina seja quad core. Agora sempre que houver modificações no banco:
rake parallel:prepare
E pra rodar:
rake parallel:test
Ou pra rodar parte deles:
rake "parallel:test[functional]"
As aspas são porque o bash incomoda com [].
Posted by Pedro Axelrud