Softa

Aplicações Web 2.0 com Ruby on Rails e Postgres 
« Back to blog

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 

Comments (0)

Leave a comment...