Testes de aceitação com o Selenium
Por Nico Steppat em 28/02/07Selenium é uma ferramenta para testar aplicações web pelo browser de forma automatizada. Selenium se referer ao Acceptance Testing (ou functional testing) que involve rodar testes num sistema finalizado. Os testes rodam diretamente num browser, exatamente como o usuário faria.
Por que Selenium?
Temos que testar o nosso código, mas em uma aplicação web fica dificil de testar a camada de apresentação, o resultado final. Como testar os custom tags (por exemplo erro.tag ou select.tag)? Como testar a compatibilidade entre browser diferentes de forma automatizada? Em geral, como testar que a página renderizada tem o resultado desejado?
Para isso serve Selenium, que se preocupa basicamente com duas tarefas
- testes de funcionalidades da aplicação web
- testes de compatibilidade entre browser e plataformas diferentes
Componentes do Selenium:
Dois componentes são importante para gerar e rodar testes com Selenium:
1. Selenium RC
É um servidor escrito em java. Ele recebe chamadas http e executa os testes. As chamadas vem dos testes unitários (com junit, por exemplo). Este blog tem foco nesse componente.
2. Selenium IDE
É uma extensão do firefox. Com ela podemos criar testes. Ela funciona com um recorder e grava as ações do usuário. As ações podem ser transformadas em código em várias linguagens entre elas java.
Integração com JUnit
Vamos criar um teste de funcionalidade com Selenium e JUnit. Precisamos:
- uma aplicação web
- o selenium server
- o selenium test client com junit
Objetivo é testar um combo box numa página jsp. Vamos deixar o selenium abrir um browser, chamar a página e testar a combo box.
A página do aplicação web
Aqui tem uma página ( index.jsp) simples para testar a opção selecionada num combo box:
<html>
<head>
<title>Selenium e JUnit HowTo</title>
</head>
<body>
Size:
<select name=”size”>
<option id=”x-large”>X-Large</option>
<option id=”large”>Large</option>
<option id=”medium” selected>Medium</option>
<option id=”small”>Small</option>
<option id=”tiny”>Tiny</option>
</select>
</body>
</html>
Vamos supor que esta página é acessível pela url: http://localhost:8080/test/index.jsp
O Selenium Server
O servidor Selenium tem obviamente estar rodando antes de executar os testes de funcionalidade. Para iniciar o server precisamos o selenium-server.jar que está dentro do Selenium-RC download .
Executamos na linha de comando:
$java -jar selenium-server.jar
Existe um modo interativo do server para passar testes diretamente na linha de comando. Basta adicionar a opção -interactiv.
$java -jar selenium-server.jar -interactiv
Mais sobre o modo interativo aqui.
O selenium client
Com a aplicação web e o servidor selenium rodando podemos escrever o teste com junit. Os métodos setUp e tearDown da classe de teste vão abrir e fechar a conexão com o servidor selenium. A classe DefaultSelenium é utilizado para a conexão. Aqui o selenium-java-client-driver.jar que vem com o Selenium RC é necessário:
|
new DefaultSelenium("localhost", 4444, "*firefox /usr/lib/firefox/firefox-bin", "http://localhost:8080") |
A porta 4444 é a padrão do Selenium, o terceiro parâmetro é o perfil do browser junto com o caminho executável (tem que ser binario mesmo), por último a url do servidor web. Existem perfis disponíveis para os browser mais usados do mercado.
Aqui temos o começo código do nosso teste unitário:
|
private static DefaultSelenium selenium; |
Falta agora o método de teste que abre a página index.jsp e verifica a opção selecionada no combobox:
|
@Test |
Ao rodar o teste o Selenium abrirá o firefox e chamará a página. Existem muitos métodos para que o Selenium preencha campos, submeta formulários, navegue entre as páginas e muito mais. Você pode utilizar o Selenium IDE e realizar as operações que deseja testar, e o Selenium IDE vai gerar um código com tudo o que você fez durante aquela sessão no browser, depois basta você adicionar as assertions desejadas, gastando pouco esforço para codificar a simulação de cliques e preenchimento de formulários.
Problemas com Firefox 2.0
Usando Firefox 2.0.1 eu tive problemas na versão atual do Selenium. Lendo o forum li que isso já foi resolvido no snapshot do selenium (que não está disponível atualmente) e será resolvido na próxima versão.
Versões usadas
- selenium-remote-control-0.9.1-SNAPSHOT
- selenium client 0.9.0
- junit 4.1
Interessantíssima ferramenta.
Estou pensando seriamente em colocá-la na minha etapa de teste em um projeto que estou gerindo em programing eXtreme. Parece se encaixar perfeitamente em nosso caso.
Comment by Victor de Souza Couto — March 1, 2007 @ 12:37 pm
Muito bom o artigo! Parabéns!
Até onde sei o pessoal do Glassfish vai começar a usar o Selenium para testar toda a GUI. Estou estudando ele há um tempinho e estou gostando, muito muito prático!
Comment by ASOBrasil — March 5, 2007 @ 10:44 am
Estou tentando instalar o Selenium, mas não consegui continuar porque estou usando o windows e o comando para iniciar o firefox é do linux:
*firefox /usr/lib/firefox/firefox-bin
Alguém sabe qual comando devo colocar para executar no windows?
Comment by Anne Caroline Rocha — July 4, 2007 @ 11:46 pm
Anne, nunca testei, mas tente o caminho p/ o firefox.exe.
Comment by Nico Steppat — July 5, 2007 @ 6:43 am
O Selenium pode ser incorporado ao Firefox como um complemento. Para isso basta ir em:
Ferramentas>Complementos>Extensões>Mais Extensões.
Será aberta uma página do Firefox onde estão armazenadas todas as atuais extensões disponíveis… para baixar o Selenium basta digitar na caixa de Busca “Selenium IDE” e logo após seguir o passo a passo.
Comment by Daniel Nascimento — July 11, 2007 @ 9:08 am
Vou aproveitar para deixar uma dúvida aqui também. Uso o Selenium Integrado ao Firefox (Windows/Linux) e queria saber como faço para utilizar o Java ou o PHP para trabalhar com descisões de fluxos no Selenium.
Para usar essas funcionalidades devo baixar um complemento? Ou devo ter apenas a linguagem instalada na minha máquina?
Comment by Daniel Nascimento — July 11, 2007 @ 9:12 am
Como faço pra criar testes no Selenium????
Instalei o Selenium Core e o IDE, mas até agora só conseguí gravar testes no Selenium IDE e depois rodar no Selenium TestRunner, não sei como crio testes para rodar direto no Selenium TestRunner.
Agradeço se alguém me ajudar nisso.
Comment by Joamar Cardoso — September 18, 2007 @ 1:56 pm
Tenho a mesma dúvida do colega acima.
Preciso fazer a automação dos teste no meu trabalho e gostei do Selenium porque é mais fácil criar os scripts.
Queria saber como fazer rodá-los no firefox e no iexplore (sem o IDE e sem HTA, por favor). É possível sem o JUnit?
Já criei o servidor selenium e já rodei o TestRunner por ele, mas quando executo meu TestSuite ele dá erro logo no começo (e funciona perfeitamente no IDE).
Tenho a faca e o queijo. Como é que eu corto?
E qual a vantagem de usar outras linguagens a não ser o Selenese?
Agradeço desde já pela atenção.
Comment by Aristóteles Júnior — December 20, 2007 @ 8:51 pm
Tenho a mesma dúvida dos comentários acima.
como faço para fazer os testes no internet explorer?
Preciso entender melhor o funcionamento do selenium TestRunner, baixei ele mais não consegui executa-lo.
Existe um tutoral que fala sobre isto? sobre o selenium IDE já encontrei varios.
Aguardo respostas.
Agradeço pela atenção desde já.
Comment by Welita Lisa — January 31, 2008 @ 12:36 pm
Pessoal,
Para testar no windows, é só colocar assim:
selenium = new DefaultSelenium(”localhost”, 4444,”*firefox”, url);
Apenas isso e funciona.
Parabéns pelo artigo, muito legal ;D
Comment by Daniel Abella — February 20, 2008 @ 2:13 pm
Eu criei os scriptis no fire fox, mas não estou sabendo como reproduzi-los de uma única vez. Gostaria que alguém me enviasse um passo a passo.
Obrigada.
Comment by Ana Claudia — April 7, 2008 @ 5:38 pm
Muito bom o Atigo! Parabéns.
Mas tenho um dúvida, é necessário usar o JUnit?
Não tenho ele instalado!!!!!:D
Comment by Fiamma Custódio — July 30, 2008 @ 4:51 pm
[...] aplicação usava algumas configurações corretamente, como o minimo e máximo de conexões (nos testes de integração e de aceite, o máximo era 3). Mas uma outra configuração importantíssima estava escrita de maneira errada [...]
Pingback by blog.caelum.com.br » Vazamento de memória e de conexões — September 2, 2008 @ 6:43 am
Deixo aqui também meus elogios pelo artigo, Parabéns Nico.
Porém tenho tido problemas com a autenticação no proxy, estou a 2 dias procurando uma solução para o meu problema e nada encontro.
Seguindo a sugestão de configuração no próprio site da Openga.
java -jar selenium-server.jar -Dhttp.proxyHost=10.2.2.10 -Dhttp.proxyPort=8080 -Dhttp.proxyUser=userTest -Dhttp.proxyPassword=passTest
Eu consigo configurar o proxy numa boa, mas a autenticação não é feita. Existe alguma alternativa para esse problema?
Comment by Hebert Thomé — September 4, 2008 @ 3:00 am
Gostei muito do artigo, so to com um problema to tentanto rodar no eclipse mais nao consigui.
Voce tem alguma dica ou material que posso me ajudar?
desde ja obrigado
Comment by Wallison — October 6, 2008 @ 3:04 am