Testes automatizados com Cabybara

Samyra Lara
Jaguaribe Tech
Published in
5 min readMar 30, 2017

O teste em um projeto é um dos momentos cruciais para se verificar se uma funcionalidade foi elaborada corretamente e está pronta para ser entregue ao cliente. Com o teste de aceitação temos a garantia que a aplicação terá o resultado esperado.

Agora imagine testar manualmente todos os cenários a cada alteração que a aplicação tiver (e ainda refazer todos os outros, para ver se as alterações não “quebraram” o que funcionava antes!). Muito trabalho…

Diante disto, os testes automatizados ajudam muito pois, conseguimos garantir que os cenários sempre serão validados, dando segurança na implementação de mudanças. Então ao invés de ficar rodando os mesmo várias vezes testes toda vez que tem uma regressão, vamos deixar o automatizado fazer isso, ele não vai cansar, ele não vai ficar desatento, sem contar, claro, que é bem mais rápido!

Capybara é um framework de automação de testes em aplicações web, open-source, e escrito em Ruby. É uma ótima ferramenta para utilizar em testes, automação, crawlers, robots, entre outras utilidades. Com ele é possível testar as aplicações simulando as ações que os usuários reais executariam, ou seja, se eu submeto um formulário, a aplicação deverá ser direcionado para a próxima página válida.

A partir da utilização de Drivers, o capybara realiza a simulação das ações dos usuário utilizando-se de frameworks que controlam navegadores ou que simulam a execução dos mesmos em memória, tornando mais rápida a execução dos testes. Alguns exemplos de ações simuladas seriam: Acessar URLs, Preencher campos, Clicar, Verificar se valores foram apresentados na tela, etc.

Como Configurar

Para utilizar o Capybara é necessário ter instalado o Ruby versão igual ou superior a 1.9.3. No arquivo Gemfile de seu projeto, deve ser inserido o trecho:

Em seguida, só executar o comando abaixo:

gem install

Se o aplicativo que você está testando é um aplicativo do Rails, adicione esta linha ao seu arquivo test_helper.rb do seu projeto:

Require ‘capivara / rails’

Nota: No Rails 4.0 / 4.1, o ambiente de teste padrão ( config/environments/test.rb) não é thread-safe . Se você tiver erros aleatórios sobre constantes ausentes, adicione config.allow_concurrency = false a config/environments/test.rb.

Com isso você já terá o Capybara instalado!

Alguns comandos:

Vemos abaixo alguns comandos do Capybara utilizados para simular as ações dos usuários:

Alguns comandos do Capybara

Para mais comandos, acesse: http://www.rubydoc.info/github/jnicklas/capybara

Vamos testar! Vejamos uma exemplificação:

Temos uma página simples de login:

Página de Login de nossa aplicação exemplo

Vamos realizar dois teste: (1) um login bem sucedido, ou seja, um usuário cadastrado no sistema que coloca seu e-mail e senha corretos para se logar e (2) um login sem sucesso, pois iremos nos logar com um usuário com sua senha errada.

Isso ficaria assim:

Detalhando:

  • Linha 14: O describe, como o próprio nome diz, descrever sobre o que se está testando. O it (linha 15) serve para dividir o mesmo tipo de teste em vários cenários. Ambos permitem uma melhor organização dos testes e dos códigos.
  • Linha 18 : Aqui dizemos que deverá ser acessada a página localhost:300/login;
  • Linha 19: O fill_in irá localizar na página o label “Email” e preenchê-lo com o valor ‘samyra@samyra.com’. O mesmo ocorrerá na linha seguinte. (Obs.: O fill_in pode ser utilizado para localizar um elemento na página pelo seu name, id ou label);
  • Linha 21: O click_button irá localizar o botão na página com o value=“Acessar” e clicá-lo. (Obs.: Com click_button é possível encontrar o elemento pelo seu id, value ou título. Esse comando ainda poderá ser utilizado para localizar qualquer elemento <input> do tipo submit, reset, imagem, botão ou pode ser um elemento <button>.

Como pode ser visto, nós criamos um usuário, do tipo aluno, dentro do teste. Em seguida, visitamos a página de login, preenchemos com seus dados corretamente e fazermos uma verificação de que, na página a qual seremos direcionados não aparecerá o texto “Senha/email inválido”. Isso quer dizer, se não apareceu o referido texto, é porque o usuário foi direcionado para a sua página inicial, ou seja, se logou com sucesso.

Página inicial do usuário logado

No segundo caso, iremos inserir o e-mail correto, mas senha será uma diferente da cadastrada. Com isso, esperamos que seja exibida na página a mensagem “Senha/email inválido”.

Tela com mensagem de insucesso ao se logar

Percebam que nesse exemplo, a diferença entre os testes está apenas na verificação do texto apresentado na página que for direcionada (seja a própria ou outra): no primeiro teste verificamos se o texto não aparece com o componente expect(page).to have_no_content(‘Senha/email inválido’) e no segundo exemplo se o texto aparece com o expect(page).to have_content(‘Senha/email inválido’).

Ao executar teremos a seguinte tela:

Tela após a execução do teste

Os dois ficaram verdes porque tiveram sucesso!

Geralmente vemos o uso do Capybara aliado a outras feramentas de teste, tais como: Cucumber, Minitest, RSpec. Com essa junção é possível testar controlles, views, models e tudo que pode (e deve) ser testado.

Considerações

O Capybara se mostra um grande aliado nos testes de aplicações web. Sua linguagem é simples e intuitiva, além de também possuir um uso considerável, o que ajuda na busca por materiais na internet. Em sua grande parte, o material encontrado na internet está em inglês, o que pode ser um ponto negativo para alguns, mas nada que um tradutor/dicionário não resolva. Ele se mostra bem prático para realizar os testes de caixa-preta nas views, inclusive com JavaScript. Unindo-o com outras ferramentas, pode-se realizar testes mais minuciosos em outras partes do projeto, podendo realizar testes de integração, regressão, unidade, etc. Através da tela da execução do teste é visível que com o describe podemos organizar os testes e saber exatamente qual cenário do teste foi executado, com sucesso ou falha, o que facilita tanto visualmente como na organização de sua suíte de teste.

Que tal experimentá-lo em seus testes? :)

“Os testes nunca podem demonstrar a ausência de erros no software, apenas sua presença.” — E.W.Dijkstra

Referências

https://github.com/teamcapybara/capybara

http://www.pablocantero.com/blog/2012/03/14/use-capybara/

http://www.qualister.com.br/blog/automacao-de-testes-com-capybara-rspec-e-poltergeist-parte-1-introducao

http://www.rubydoc.info/github/jnicklas/capybara

--

--

Samyra Lara
Jaguaribe Tech

Divida entre Semiótica literária e o Teste de Software.