[Tiago Motta] Teste de aceitação automático com múltiplas configurações no rails

Dado que uma aplicação possua duas maneiras ou mais de funcionar de acordo com alguns parâmetros de inicialização, como proceder com os testes de aceitação automáticos sem ter que iniciar e parar o servidor entre cada cenário ou grupo de cenários?

A solução simples, mas bem funcional que adotamos, foi ter uma task rake para inicializar vários servidores no ambiente local, cada um com um environment e uma porta diferente. Assim, ao testar uma determinada funcionalidade com determinada configuração basta acessar o servidor naquela porta.

A task rake que poderia até mesmo ser um shell script, ficou mais ou menos como mostrado abaixo. Créditos ao Tiago PacMan, mestre em shell, que fez a linha que finaliza os servidores.

desc 'Inicia servidores para teste de aceitação'task "server:test" do  system 'RAILS_ENV=test_conf_1 script/server -d -e test -p 3001'  sleep 1  system 'RAILS_ENV=test_conf_2 script/server -d -e test -p 3002'  sleep 1  system 'tail -f log/test.log'  system "ps aux | awk '/3001/{print $2}' | xargs kill -9"  sleep 1  system "ps aux | awk '/3002/{print $2}' | xargs kill -9"  sleep 1end

Repare que para este caso fizemos uma modificação no environments.rb para unificar os logs de todas os ambientes de teste.

Já no ambiente de integração contínua, onde utilizamos apache com passenger, foi mais simples ainda, bastando definir para diferentes VirtualHosts RailsEnvs diferentes.