,

sexta-feira, 22 de fevereiro de 2013

Selenium – Uma Boa Opção Open Source para Automação de Testes

Este post é a primeira contribuição do nosso coladorador Thiago Ferreira para o GUTS-PB. O mesmo espera ter colaborado com um pouco do seu conhecimento da área de Qualidade e Testes de Software, falando um pouco do Selenium IDE (ferramenta de automação de testes Open Source).

Antes de aprofundarmos mais no conhecimento da ferramenta, vamos falar um pouco sobre o projeto Selenium.

O Selenium (http://docs.seleniumhq.org/) é um projeto que reúne um conjunto de ferramentas usadas para a criação de scripts de automação de testes de regressão para aplicação Web. O Selenium foi escrito basicamente utilizando Javascript e DHTML. Os testes podem ser executados em qualquer navegador, desde que suporte Javascript.

Os testes são escritos basicamente através de tabelas HTML (isso mesmo, as velhas conhecidas tags <table> e </table>). Nas tabelas são informadas as operações ou asserções de um teste e os seus respectivos argumentos. O Selenium é responsável por interpretar os comandos das tabelas HTML e executar as ações, simulando um usuário real.

O projeto Selenium é dividido em 4 módulos diferentes:
  • Selenium IDE (http://docs.seleniumhq.org/projects/ide/): É o ambiente gráfico integrado ao navegador Firefox capaz de gravar e reproduzir os testes do Selenium. Utiliza o método Record/Playback, no qual registra todas as ações do usuário. Essas ações são convertidas para o Selenês automaticamente para que o teste possa ser salvo, reexecutado e depurado individualmente ou em conjunto com outros testes.
  • Selenium RC (Remote Control) (http://docs.seleniumhq.org/projects/remote-control/): Neste modo os testes são dirigidos por uma das linguagens suportadas pelo Selenium (Java, Ruby, Python, entre outros).
  • Selenium WebDriver (http://docs.seleniumhq.org/projects/webdriver/): Sucessor do Selenium RC, este módulo aceita comandos (escritos em Selenese) e os envia diretamente para o navegador que está sendo executado os testes. Para isso, é preciso de um driver específico para execução dos testes. Ao contrário do RC, ele não precisa de um servidor para executar os testes, pois, ele inicia uma instância do navegador e executa os comandos previamente programados no script de testes.
  • Selenium Grid (http://docs.seleniumhq.org/projects/grid/): Módulo do Selenium que permite a execução de vários navegadores web em diferentes máquinas, permitindo a execução em paralelo com diversas máquinas.

O Selenese (ou Selenês) é a sintaxe dos comandos gerados pelo Selenium, onde um teste escrito em Selenese é basicamente composto por uma tabela contendo três colunas. Uma coluna é usada para operação e as duas restantes são usadas para os argumentos: 
 
Figura 1: Exemplo de um caso de teste escrito em Selenese.

Na interface do Selenium IDE temos a seguinte estrutura:

Figura 2: Selenium IDE.
Onde no campo “Tabela” na interface temos:
  • Comando: Neste bloco da tabela se insere as instruções que serão executadas;
  • Alvo: Neste bloco é o primeiro parâmetro da função a ser executada. As funções do Selenium utilizam este parâmetro para informar qual é o elemento identificador (especificamente o ID ou o NAME da tag HTML, DOM (expressão Javascript) XPATH (expressão a ser aplicada) links, CSS, entre outros) a ser buscado;
  • Valor: Insere o valor, uma identificação. Nem sempre na criação dos casos de teste este campo será preenchido.

De modo similar, as Suítes de Testes (as chamadas “Test Suíte”, grupos de Casos de Testes executados em conjunto) também são representados em tabelas HTML. Cada Suíte de Testes referencia um ou mais casos de teste que são criados na interface do programa.

As operações suportadas pelo Selenês são divididas em três grupos distintos:
  • Actions: Representam as operações realizadas pelo usuário durante a utilização da aplicação Web. A maioria das Actions representam ações do tipo “clicar em determinado link ou botão, selecionar determinada opção”, entre outros. Se a execução de uma Action falhar, o status do teste é modificado para “Failed” e o teste é imediatamente paralisado. Adicionalmente, você poderá adicionar o sufixo “AndWait” para a maioria das Actions. Este sufixo informa ao Selenium que a ação gerou uma requisição do servidor e a execução do teste precisa esperar que a página seja recarregada.
  • Accessors: Executa uma asserção (compara o estado ou propriedade de um objeto da página contra um valor esperado) e armazena o resultado numa variável. O resultado negativo de uma Accessor não paralisa a execução do teste, no entanto, a falha é exibida no resultado dos testes.
  • Assertions: Executa uma asserção (compara o estado ou propriedade de um objeto da página contra um valor esperado) No entanto, a Assertion não armazena o resultado numa variável. O resultado negativo de uma Assertion não paralisa a execução do teste, no entanto, a falha é exibida no resultado dos testes.

Uma vez aberta a janela do Selenium IDE e clicado o botão de Record/Playback, qualquer ação que você executar nas páginas do navegador será convertida para uma operação em Selenês na aba “Tabela”. No entanto, o Selenium IDE não se limita apenas a reproduzir os cliques ou preenchimentos dos campos realizados durante a navegação. Pode-se também selecionar qualquer uma das operações suportadas pelo Selenês conforme a sua necessidade por meio do campo “Comando”. Pode-se também realizar a inserção manualmente, o que, em minha opinião, é bem melhor, pois, fazendo dessa forma, o analista de testes/testador mantém maior controle sobre os scripts de testes criados, fazendo assim com que tenha um conhecimento maior sobre o script gerado pela ferramenta.

Durante a gravação da navegação pode-se selecionar qualquer objeto da página e adicionar uma operação ou asserção de acordo com o contexto do objeto selecionado ou da ação que queira executar.

E por fim, assim que é finalizada a gravação da navegação da aplicação Web, todos os passos executados serão convertidos automaticamente em Selenês e estarão disponíveis na aba “Tabela”. O teste poderá ser salvo no formato HTML para que seja posteriormente executado. Também pode executar, pausar ou depurar o teste por meio da ferramenta.

É possível também testar aplicações Web baseada em AJAX (Uma página AJAX é capaz de realizar diversas operações, sem, no entanto, precisar buscar ou trocar muitas informações com o Web Server) utilizando o Selenium IDE.


E aí, se interessou pela ferramenta? Ótimo, pois, é uma excelente solução Open Source para testes de regressão. Mas, antes de pôr a mão na massa, veremos algumas diferenças entre os comandos que são executados pelo Selenium IDE, que para quem está iniciando é essencial compreender o seu funcionamento. Os comandos podem ser do tipo:
  • Assert: Todos os comandos relacionados ao Assert irão parar a execução sempre que ocorrer um erro. Bastante utilizado para verificar se o navegador encontra-se na página correta;
  • Verify: Registra o erro, caso exista, sem interromper a execução do teste. Bastante útil para analisar os itens da página;
  • WaitFor: Toda instrução que tiver o “WaitFor” ficará esperando até que uma outra instrução retorne um valor (true or false) para que o mesmo saia desta espera.
E por hoje é só pessoal!  Espero que tenham gostado dessa postagem. O Selenium IDE é uma ferramenta poderosa, desde que seja usada de forma correta. Trabalho há algum tempo e tenho obtido resultados satisfatórios na geração dos scripts de testes. O único problema do Selenium IDE são os relatórios de erro que são apontados na aba “Mensagem”, onde, a informação gerada (quando ocorre o erro ela fica destacada na cor vermelha) é muito confusa. Fora esse detalhe, é uma ferramenta muito boa para automação e execução de casos de testes. 
 
Precisando, estamos às ordens. Até o próximo post.


Post enviado por: Thiago Ferreira Barbosa, Pós-Graduado em Qualidade  e Testes de Sofware
Analista de Sistema na Confederação das Unimeds Norte/Nordeste.


9 comentários:

  1. Parabéns pelo post. Muito importante a explanação de características de uma ferramenta que facilita a vida do Analista de Testes, sobretudo pelo fato de ser uma ferramenta Open Source.

    ResponderExcluir
    Respostas
    1. Obrigado Antônio. :)
      Sempre que puder irei contribuir postando opções bacanas de ferramentas de testes open source, a fim de facilitar mais o trabalho dos analistas de testes.

      Excluir
  2. Parabéns pelo post, achei muito interessante e de grande valor e contribuição!!!

    ResponderExcluir
  3. Muito interessante, pesquisei em outros sites, mas este seu post está muito rico em conteúdo. PARABÉNS

    ResponderExcluir
  4. Thiago, seu post tem um conteúdo aprofundado e de fácil entendimento. Gostaria de ver mais publicações suas aqui!

    Karina Andrade
    Estudante de TI

    ResponderExcluir
  5. Utilizo o selenium e também posso comprovar sua eficácia... parabéns pelo post de altíssimo nível... muito bem elaborado!!

    ResponderExcluir
  6. Oi Pessoal,

    Agradeço todos os comentários postados.
    E podem aguardar mais postagens muito em breve. :-D

    ResponderExcluir
  7. Olá Thiago , gostaria de saber mais alguns detalhes específicos sobre a automação de testes usando o Selenium, trabalho com isso. Por favor me passe seu e-mail para que possamos conversar melhor a respeito. E para que eu possa tirar algumas dúvidas se você não se importar.
    Aguardo sua resposta.
    Obrigada

    ResponderExcluir
  8. Utilizo o WebDriver do Selenium + Cucumber (Cenários de testes e alimentação de dados no sistema) + Serenity (Relatório) para automação. Diria que é uma ótima ferramenta.

    ResponderExcluir