terça-feira, novembro 10, 2009

Selenium, a melhor ferramenta para testes de aplicações web


Avançando no Terceiro Milênio, não dá mais para conceber a construção de uma aplicação Web sem ter testes automatizados. Não fazendo testes automáticos, você estará jogando na mão de seu cliente a responsabilidade de testar a aplicação. Este é um trabalho que deveria ser seu. Não fazê-lo é um desrespeito com quem te paga. Estará também jogando dinheiro fora, pois quanto mais tempo você demora para descobrir um erro, mais custoso é consertá-lo.

E pra fazer testes funcionais de aplicações web, a ferramenta é uma só: Selenium. É tudo de bom: grátis, open source e bem feito. Um dos melhores projetos de código aberto que existem por aí.

O Selenium te permite testar um sítio virtual em vários browsers e sistemas operacionais. Testa Javascript e ajax. Nada melhor para achar problemas de incompatibilidade.

O Selenium na verdade não é um único projeto, mas um ecossistema de diferentes softwares que interagem entre si. Os principais projetos são:
Selenium Core
O núcleo do Selenium é uma biblioteca Javascript que te dá basicamente dois tipos de comandos. Um para comandar um browser: clicar em links, preencher formulários, fazer uma ação depois de aparecer algo na tela etc. Outro tipo é para fazer asserções, como se há um texto presente, se tal elemento está sendo exibido, se a página foi corretamente carregada etc. É a pedra fundadora do Selenium. Inspirado nos Testes Fit, você define os seus passos de testes em uma tabela – no caso em HTML – que é interpretada, executada e um relatório final com sucessos e erros é gerado.

Selenium IDE
Fazer as tabelas de teste do Selenium IDE é muito trabalhoso. Inventaram então este sensacional plugin para o Firefox. Com ele você pode gravar toda uma sessão de navegação e dar playback nela depois. Durante a gravação vários comandos extras são adicionados ao menu de contexto (botão direito) do Firefox. Estes comandos lhe permitem fazer asserções sobre o que está sendo gravado, como, por exemplo, selecionar um texto na tela e incluir uma asserção para verificar se o texto selecionado está presente.

É um barato ver seu navegador funcionando sozinho, como se fosse controlado por um fantasma. Chefes e clientes adoram. Apesar de serem gravados no Firefox, os testes podem ser executados em qualquer navegador e sistema operacional.

Selenium Remote Control
Aqui o negócio começa a ficar sério. O Selenium Remote Control te permite controlar um browser e fazer asserções de dentro de uma linguagem de programação. Você passa a ter acesso a loops, funções (para não repetir código de testes) e, o melhor, às bibliotecas da linguagem. Dá para rodar um teste e depois conectar direto à base de dados para verificar se os dados foram corretamente modificados.

Um workflow comum é você gravar um teste inicial no Selenium IDE, dar um "Save As" para ser gerada uma versão para a sua linguagem de programação favorita (Python, Ruby, Java ...) e então criar testes mais sofisticados. Seus testes podem ser executados dentro de um framework de testes, como os da família xUnit, e rodar dentro de seu processo de Integração Contínua.

Selenium Grid
Uma coisa temos que assumir: fazer testes comandando um browser é lento. Muito lento. Especialmente depois que se começa a ter mais de uma centena de testes. Tá certo que são testes funcionais, ninguém está esperando que obedeça às regras de velocidade de testes unitários, mas pegar um erro dias depois, é demais. O Selenium Grid vem resolver isto, ele distribui os testes para executarem em paralelo em vários computadores diferentes. É chato de configurar, mas a recompensa é grande quando os testes começam a demorar muito.

Já usei o Grid até mesmo para realizar testes de stress em uma aplicação. Tá certo que não é a ferramenta mas apropriada, mas dependendo de aplicação web é (mal) feita, pode ser a única alternativa.

E a boa notícia é que uma das melhores referências sobre o Selenium é em Português! É o excelente Blogue do Seu Enium. Lá você aprende do beabá a usar o Selenium Grid, passando pela divertida explicação do porquê do nome Selenium.

Outra coisa muito legal que se pode fazer com o Selenium é automatizar sua vida. Sabe as aplicações Web com uma terrível interface e que você é obrigado a usar? Aquelas que você tem que clicar em um milhão de lugares e preencher um monte de campos para chegar onde quer? Basta gravar um script no Selenium IDE que faz tudo pra você. O macete é nos momentos que preencher um dado específico (como uma senha), colocar um comando para o Selenium esperar um texto da tela seguinte para continuar a executar. Nada melhor para evitar uma tendinite.

Por fim, vale deixar o aviso de que o Selenium não é nenhuma bala de prata. É uma ferramenta fundamental para se entregar aplicações web de qualidade, mas não é trivial usá-lo bem. É preciso bons testers para pegar os casos que podem dar problemas e não testar apenas o caminho de execução principal. Colocar os comandos certos para que erros intermitentes não aconteçam é mais uma arte do que uma ciência. Se sua empresa tiver a mentalidade de que testers são imbecis (sim, isto existe), não vai funcionar. É preciso que os desenvolvedores trabalhem junto com os testers para que as aplicações sejam fáceis de testar. Testar widgets de algumas bibliotecas Javascript pode ser bem enrolado.

Não é por estar fazendo testes com uma super-ferramenta é que você poderá prescindir de seu cérebro.

Um comentário:

Josair Fusca na Veia! (o\5!3/o) disse...

Boa noite, saberia me dizer onde posso trabalhar como analista de teste desse sistema? Sou do Rio de Janeiro, se souber de alguma vaga. Desde já obrigado!