Testes de aceitação com o Selenium

Por Nico Steppat em 28/02/07

Selenium é 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;
 
     @BeforeClass
     public static void setup() {
         String url = "http://localhost:8080";
         selenium = new DefaultSelenium("localhost"4444"*firefox /usr/lib/firefox/firefox-bin", url);
         selenium.start();
     }


     @AfterClass
     public static void tearDown() {
         selenium.stop();
     }

Falta agora o método de teste que abre a página index.jsp e verifica a opção selecionada no combobox:

@Test
public void testSelectedIdOfSizeComboBox() {
     selenium.open("/test/index.jsp");
     assertEquals("medium", selenium.getSelectedId("size"));
}

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

USP, São Carlos, software livre e o OLPC

Por Paulo Silveira em 08/02/07

Esses últimos dois dias estive em São Carlos, no ICMC da USP (casa de alguns colegas da comunidade). Dois professores do IME, instituto onde estudo e mantenho alguns trabalhos, não puderam participar então fui, jutamente com o Alexandre Freire, a apresentação do italiano Stefano De Panfilis da Engineering Ingegneria Informatica (maior empresa de software da Itália), que veio falar sobre o projeto Qualipso e os centros de competência de software livre que estão sendo criados na União Européia (e eles estão bancando um na China e outro aqui no nosso Brasil). A previsão da união européia sobre o uso de software livre nas empresas não poderia ser mais animadora. A polêmica idéia da UE é a de criar um certificado “CMM-like” para projetos open source. Arrojado.

O Alexandre Freire é um cara ímpar: foi desenvolvedor java em Trevenso na Itália, couch de XP na paggo, hospedou o Richard Stallman em sua própria casa por uma semana, é um dos responsáveis pelo Estúdio Livre, gerente de projeto do Ministério da Cultura (MinC) quando palestrou em diversos lugares do mundo, desde a Inglaterra até a Tunísia, já jantou com o Carlos Villela e com o chefão da Thoughtworks por lá, e até instalou internet via satélite em uma aldeia cabloca no interior do Pará: Aritapera. Um ativista. Sempre que o encontro ele está tecendo muitas idéias novas. O volume de informações que eu adquiro é incrível.

Durante a apresentação do Alexandre, me dei conta que o IME já produziu bastante software livre: avançados hacks no kernel do linux, agendamento de carga didática usando algoritmos genéticos, diversos plugins para o eclipse, organizadores de aula, sistemas de prontuário eletrônico usando PDAs, possui comitters no JBoss e Jacorb, entre uma lista com mais de 20, e devem haver mais sem contar as implementações de algoritmos sem uso direto na indústria.

O grande problema é gerenciar todo esse trabalho e código: como reaproveitá-lo. O Centro de Competência em Software Livre da USP, que está sendo construído grudado ao bloco do IME, será responsável por isso e muito mais!

CIMG1121 CIMG1117
CIMG1113 CIMG1111

Também tive ontém meu primeiro contato com o OLPC devido a proximidade do Alexandre com o MinC. É o primeiro protótipo (deverá haver mais dois). Fiquei muito impressionado com o que conseguiram fazer com 145 dólares: 256 mb de ram, um excelente lcd, câmera, som, wifi e dois slots usb. O teclado e o touchpad desta versão não estão muito funcionais (leia-se: as vezes não funcionam). Quando fechado ele realmente parece um brinquedo (passaria desapercebido como uma lancheira).

O Sugar, o desktop manager do OLPC, é um show a parte: eles mudaram totalmente o conceito de desktop: as crianças possuem três ambientes (que podem ser acessados por teclas): as suas aplicações, as aplicações que estão comparilhadas entre seus amigos, e as aplicações que estão compartilhadas entre todo mundo. Isso tudo via descoberta ad-hoc e sem usar palavras, apenas ícones, aumentando o apelo para as crianças.

O Etoys é uma aplicação escrita em Smalltalk rodando no Squeak, que tem inspirações no nosso bom e velho Logo (saudades do CP400 de meu pai), vai certamente trazer algumas crianças para o nosso ramo. Confira no vídeo abaixo uma apresentação do sugar e repare no Etoys.

Java não vem instalado, mas com o Java 6 sendo GPL talvez isso mude. A maioria das aplicações são escritas em python. Todas as aplicações são colaborativas: até mesmo o firefox pode ser compatilhado para que o guri mostre a seus amigos o incrível artigo que descobriu no wikipedia (ou quem sabe um tutorial de como quebrar MD5 por força bruta com menos tentativas). Confesso que sempre duvidei do sucesso do projeto, agora mudei de lado.

Conheci lá o Christian Reis, um python hacker amigo do Alexandre que dirige a Async, uma empresa fortemente ligada com a Canonical, prestando serviço para fora e fabricando software livre. Fiquei impressionado com a relação da empresa com a universidade e a comunidade. Seu modelo de negócios vale um estudo aprofundado.

Foram dois dias bem agitados. A Caelum vai participar de perto do centro de competência e em breve teremos novidades.