Automação testes Web

De DTI Wiki

Ir para: navegação, pesquisa

A automação de testes web trata da automação dos sistemas da Intranet. O teste automatizado consiste em controlar programaticamente um navegador para simular as ações do usuário e verificar o resultado. O navegador executa os passos que o testador faria manualmente (inclusive entrar com o usuário do testador e fazer uso do Become++ para simular ser outro usuário). Idealmente deve-se verificar de tempos em tempos quais são os navegadores mais usados na Intranet para garantir que se está usando os mesmos nos testes automatizados. A realização dos testes nas máquina virtuais é recomendado. Se o teste é feito fora de uma máquina virtual (ou seja na máquina que o testador está usando para realizar outras atividades) é possível que o testador alterne, de modo não intencional, para janela do navegador (controlado programaticamente) e afete o resultado do teste. Em 04/02/2014 quando o Firefox era controlado, mesmo que houvesse outra janela sobre ele (ele não estivesse vísivel ou em foco), se um menu dropdown era acessado ele aparecia na frente de qualquer outra janela (só o dropdown, não toda janela do Firefox). Esse comportamento não foi observado ao se controlar o Chrome e o IE.

Tabela de conteúdo

Ruby + Cucumber + RSpec + Capybara + Selenium

Conjunto de tecnologias usadas para fazer testes de aceitação em aplicações web. Abaixo é feita um breve explanação sobre a utilidade/responsabilidade daquela determinada tecnologia no conjunto. Em teoria cada tecnologia é independente da outra (no sentido que pode ser substituida por outra), com exceção das bibliotecas em Ruby, que dependem da linguagem Ruby, é claro, mas há ports de algumas destas para outras linguagens (sendo ainda possível, portanto, substituir a linguagem), vide abaixo.

Ruby (linguagem de programação)

Basicamente a melhor forma de ser introduzido a linguagem é visitar ruby-lang. O guia de estilo recomendado é este. No entanto, graças ao alto nível da API do Capybara, dificilmente construções complexas e que necessitam maior conhecimento da linguagem serão necessárias.

Relação com outras tecnologias

A linguagem de programação na qual o Cucumber, RSpec e Capybara (originais) foram escritos. O Selenium é mais que somente uma biblioteca Ruby (são dlls que controlam navegadores) e podem ser acessadas por diversas linguagens de programação.

Referências

O ruby-lang, site oficial da linguagem ruby.

O ruby-doc com a documentação das classes básicas da linguagem (core, não necessita ser incluído, está disponível por padrão) e a biblioteca padrão (std-lib, necessita ser incluída, não necessita instalar). Atenção a versão da linguagem que se está usando. Em 04/02/2014 versão 2.1.0 era a oficial, porém no Windows o uso de 1.9.3 ou 2.0.0 era recomendado (se havia optado por 2.0.0).

O rubygems, maior repositório de gems (bibliotecas empacotadas Ruby), infelizmente a busca pesquisa somente por nome de pacote e não descrição. É sempre útil buscar a página de uma gem usada alí pois a página da gem oferece o link para tutorial/documentação/wiki/'mailing list'/'bug tracker'/repositório.

O rubydoc (sem hífen) permite pesquisar bibliotecas que não fazem parte da std-lib e oferece a documentação das mesmas.

Cucumber (ferramenta de apoio a BDD)

Cucumber é a ferramenta que permite escrever um documento em linguagem natural (suporta várias línguas, inclusive o português) com os casos de uso de uma funcionalidade, e então ligar os passos dos casos de uso com código que realmente executa esses passos. Vide abaixo.

arquivo.feature (linguagem natural, ou também chamada, sintaxe Gherkin)

# language: pt
Funcionalidade: Adição
Para evitar erros bobos
Como um péssimo matemático
Eu quero saber como somar dois números

  Cenário: Adicionar dois números
  Dado que eu digitei 50 na calculadora
  E que eu digitei 70 na calculadora
  Quando eu aperto o botão de soma
  Então o resultado na calculadora deve ser 120

passos.rb (código, no caso na linguagem ruby)

Before do
  @calc = Calculadora.new
end

After do
end

Dado /que eu digitei (\d+) na calculadora/ do |n|
  @calc.push n.to_i
end

Quando 'eu aperto o botão de soma' do
  @result = @calc.soma
end

Então /o resultado na calculadora deve ser (\d*)/ do |result|
  @result.should == result.to_i
end

É dificil entender o Cucumber e porque ele é útil sem entender BDD (Behaviour Driven Development, que é baseado no TDD, Test Driven Development). É provavelmente necessário estudar material externo para compreender bem o propósito da ferramenta e usá-la sem deturpar seu propósito.

Referências

O site oficial do cucumber é o http://cukes.info/. O github do cucumber tem ligação para vários recursos (a wiki, a documentação da API, etc). A wiki é bastante completa. Além da página inicial da wiki, um ótima introdução se encontra em aqui. Dois artigos (em português) escritos por alunos de graduação da UPF sobre o Cucumber (Arquivo:CucumberReport.pdf) e sobre uma experiência com ele dentro da DTI (Arquivo:RelatorioFinalGrupo1 05122012.pdf) podem vir a ser úteis para compreensão do assunto.

RSpec (métodos de teste)

O RSpec, ou mais especificamente o rspec-expectations é usado simplesmente pelos seus métodos de teste simplificados, como abaixo:

page.should have_content('Não há dados cadastrados')

O RSpec como um todo poderia ser usado no lugar do Cucumber, ele permitiria praticar BDD com a diferença que não haveria o arquivo.feature que é legível para o usuário, seria tudo direto no arquivo de passos. A descrição dos passos um após o outro seria visível na execução do teste. Mais pode ser visto em: http://jeffkreeftmeijer.com/2010/steak-because-cucumber-is-for-vegetarians/.

Capybara (métodos de alto nível para controlar o navegador)

Oferece uma API de alto nível para simular interação do usuário com o navegador. Não define um framework de testes, pode ser usada com RSpec e/ou Cucumber. Não controla o navegador diretamente, depende do Selenium ou algum outro WebDriver para fazê-lo. O que ele faz é permitir que você escreve códigos simples como abaixo:

visit '/sessions/new'
within('#session') do
  fill_in 'Login', :with => 'user@example.com'
  fill_in 'Password', :with => 'caplin'
end
click_link 'Sign in'

Uma boa introdução pode ser encontrada aqui. Uma documentação completa pode ser vista aqui.

Capybara já foi questionado por ser "muito alto nível". Por exemplo, no excerto de código acima não especifica se o 'Login' é o atributo name, id ou texto da legenda associada ao campo de texto. Isso pode gerar ambiguidade e causar problemas aos testes. Nesse artigo o autor defende o uso do Watir e não do Capybara em base desses argumentos. A API do Capybara, entretanto, possui métodos de busca mais completos também, como pode ser visto aqui

O Capybara não possui os testes "page.should have_content" isso é o RSpec. Ele se preocupa mais em controlar o navegador que testar.

Selenium (controlador do navegador)

Responsável por controlar o navegador. Suporta IE, Firefox, Chrome e outros. Informações sobre como acessar a biblioteca por meio das bindings Ruby é fornecida aqui.

Tutoriais instalação ambiente

Windows 7

Instale o Ruby 2.0.0 x86 por meio do RubyInstaller, escolha o pacote 2.0.0-pXXX com o valor de XXX mais alto.

(Foi usada a versão x86, e não a x64, mesmo sendo o Windows 7 64bits porque o Ruby 2.0.0 x64 não funciona com Rautomation, usado para automatizar testes em aplicativos desktop windows. Além disso o site do RubyInstaller, em 06/02/2014, considerava a versão 2.0.0 x64 muito recente no Windows.)

Na instalação selecione o 'Add Ruby executables to your path', para os demais passos só aceite as configurações padrão do instalador.

Instale os navegadores que serão necessários. A última versão do Firefox e Chrome, e atualize o IE para última versão disponível.

A variável PATH (alterada pelo instalador) só será atualizada quando você reiniciar o computador, para não ter de reiniciá-lo você pode executar o seguinte comando no prompt que será usado nas próximas instruções: "PATH=%PATH%;C:\Ruby200\bin", caso contrário haverá a mensagem de erro: "'gem' não é reconhecido como um comando interno ou externo, um programa operável ou um arquivo em lotes.".

Abra o prompt (ou use o qual você inseriu o PATH) e execute "gem install cucumber capybara selenium-webdriver rspec" (pode demorar um pouco para executar).

Para testar se o Cucumber está funcionando você pode navegar no prompt até a pasta "C:\Ruby200\lib\ruby\gems\2.0.0\gems\cucumber-1.3.10\examples\i18n\pt" e executar o comando 'cucumber'. A saída deverá conter "1 scenario (1 passed)".

Para testar se todos os componentes estão funcionando você pode baixar este pacote e extraí-lo em um local de sua preferência. Edite o arquivo tester_login_info e altere-o para conter o seu usuário e senha (esse usuário deve ter acesso ao Become++).

Use o prompt para navegar até a pasta extraída e execute o comando abaixo:

rake CUCUMBER_OPTS="--name 'Buscar pessoa f.sica/jur.dica cadastrada'" 

(infelizmente é necessário colocar pontos onde seriam os caracteres não-ASCII devido a diferença de codificação de caractere do terminal do windows para o utf-8 usado pelo Ruby)

O caso de teste buscará pessoa física e jurídica pelo nome, CPF/CNPJ e código, no Firefox, Chrome e IE. Em janeiro de 2014 esse teste falhava para nome e código (só funcionando para CPF/CNPJ). Ele levará alguns minutos em que idealmente você não deve mexer no computador para ter certeza de não interferir no teste (caso você esteja fazendo isso em uma máquina virtual você pode usar o hospedeiro a vontade). Se você usar somente 'rake' toda suite de testes será executada nos três browsers (o que pode levar algumas dezenas de minutos). Não há problema de já ter algum dos navegadores abertos. Extensões do navegador instaladas normalmente não estarão ativadas na instância controlada pelo Selenium (e não afetarão os testes).

Windows XP (Máquina Virtual)

NECESSÁRIO DISCUTIR SE O IE8 SERÁ CONFIGURADO USANDO MODO DE COMPATIBILIDADE, OU NÃO. PROVAVELMENTE O CERTO SERIA ESCOLHER O DEFAULT QUE SERÁ O QUE TERÁ EM MAIS MÁQUINAS DE USUÁRIOS. VIDE: http://stackoverflow.com/questions/5804714/selenium-ie8-force-ie8-compatibility-view

Sistema Hospedeiro (instalação e configuração máquina virtual)

Vide: Configuração Máquina Virtual Windows XP

Máquina Virtual

AS INSTRUÇÕES ABAIXO DEVEM SER EXECUTADAS NA MÁQUINA VIRTUAL (E NÃO NO SISTEMA HOSPEDEIRO)

Execute os passos como indica o tutorial para Windows 7 (deve-se notar que quando se escreveu esta frase se estava referindo a [essa versão do tutorial para Windows 7]).

A unica exceção é relativa a questão da alteração da configuração do "Protected Mode" no Internet Explorer. O Windows XP suporta o IE somente até a versão 8. O IE8 (do Windows XP especificamente) possui o "Protected Mode" mas não possui nenhuma forma de configurá-lo. O IE8 no Windows 7 possui essa opção.

Os problemas ocorrem quando o IE passa de uma página de intranet para outra externa (que possuem configurações diferentes de "Protected Mode"). Caso isso não ocorra (o que é provável já que estamos testando aplicações da intranet sem ligação a páginas externas) isso não é necessário. Para saber mais sobre o assunto vide este artigo.

Outras alternativas

Não se pesquisou muito a fundo outras alternativas. Algumas que se sabe existir são citadas abaixo. A página principal da wiki do Cucumber enumera algumas alternativas.

Behat + Mink

Substitutos do Cucumber e Capybara para PHP: Behat (Cucumber) e Mink (Capybara). Ainda é necessário um WebDriver (pode ser Selenium, a página do Mink descreve várias possibilidades de WebDriver).

Ferramentas pessoais
Espaços nominais
Variantes
Ações
Navegação
Ferramentas