Testes automatizados de aplicações web com Selenium
Colaboração: Miguel Galves e Odracir Antunes Junior
Data de Publicação: 07 de fevereiro de 2008
Boa parte das aplicações desenvolvidas últimamente são aplicações WEB, e portanto também é fundamental poder fazer testes através do browser, como se fosse um usuário comum operando o sistema. Obviamente isto não exime o desenvolvedor de implementar os testes unitários. Os testes através da camada web devem ser um complemento aos testes mais básicos.
O Selenium é uma ferramenta de para testes de aplicações WEB, distribuída sob a Apache License, Version 2.0 . Temos os seguintes modos de uso do Selenium.
Selenium Core - (Modo direto)
Os testes são efetuados diretamente através do browser. As páginas de teste devem estar hospedadas no mesmo servidor que o programa/site a ser testado. Esta restrição/característica é função da segurança relativa à mesma origem requerida pelo javascript.
Vantagens:
Suporte para todos os browsers
Desvantagens:
- É necessário a instalação remota no servidor.
- Possui algumas limitações para testes mais complexos.
- Pode ter um comportamento irregular quando se testam páginas com ajax, onde é necessário um controle maior do tempo, e/ou seqüencia de eventos. Este comportamento é altamente dependente do engine java script do browser. Dependendo do caso, às vezes pode apresentar falsos erros em função da priorização das atividades, já que tando quem testa quanto quem é testado estão sendo executados sob o mesmo engine java script, e comportamentos concorrentes podem não ser tão previsíveis assim
Selenium IDE - (Modo indireto - Plugin no browser)
Os testes são efetuados através de um plugin instalado no FireFox. Este plugin é um ambiente integrado de desenvolvimento. Permite gravar a navegação do usuário, e depois repeti-la à titulo de teste. Também permite exportar os testes gravados em outros formatos. (Maiores explicações adiante )
Vantagens:
- A instalação é local e simples.
- É muito fácil de usar.
- Permite gravar sessões de teste para uso posterior.
- Permite exportar as sessões de teste como arquivos fonte Java, C#, Perl, PHP, Python e Ruby, que podem ser usados pelo Selenium RC.
- Excelente para quem inicia o uso do Selenium.
- Não é preciso saber programar.
Desvantagens:
- Funciona como plugin apenas no FireFox.
- Possui algumas limitações para testes mais complexos.
- Pode apresentar o mesmo comportamento irregular relatado no item Selenuim Core. (colocar link local para #L1)
Selenium RC - (Modo indireto - Programa de teste + Proxy)
Os testes são efetuados através de um programa, que comanda o browser através de um proxy. Este programa pode ser escrito em Java, C#, Perl, PHP, Python e Ruby.
Vantagens:
- Permite o uso de verdadeiras linguagens de programação.
- Permite um controle muito mais apurado do tempo, seqüencia de eventos, etc.
- É possível importar os testes gerados pelo Selenium IDE.
- Muito mais flexível e poderoso. Pode evoluir até para grandes suítes de testes, integração contínua, geração de relatórios . Como o programa está nas suas mãos você pode fazer o que quiser!
Desvantagens:
- A instalação e configuração do ambiente é um pouco mais trabalhosa.
- É necessário saber programar.
- Pode ser mais complicado escrever os testes à partir do zero .
Sugestões de uso
- Instale o Selenium IDE e crie os seus testes básicos.
- Exporte esses testes como programas (java, por exemplo).
- Crie um projeto com as suítes de teste para uso com o jUnit.
- Faça um refactoring nas classes geradas pelo Selenium IDE, pois o código gerado tem muita redundância.
- Melhor ainda seria arrumar o código para ficar simples como uma mini DSL , mais adequada para a sua aplicação, com chamadas de mais alto nível.
Depois de que automatizamos uma parte dos testes, aquilo que antes levava 4 dias passou a ser feito em apenas 20 minutos! Uma cobertura mais abrangente e confiável! A tranquilidade e a segurança que temos depois que os testes passam após um refactoring , ou mesmo antes de uma entrega do sistema para o cliente, é algo que não tem preço!
Odracir Antunes Júnior é Analista de Sistemas com mais de 20 anos de experiência de desenvolvimento de sistemas em C, C++ e Java. Miguel Galves é Engenheiro de Computação e Mestre em Ciência de Computação pela Unicamp, e editor do blog Log4dev. O texto completo da dica pode ser visto em http://log4dev.com/2008/01/24/testando-aplicacoes-web-com-selenium/