Blog > Automação de Testes Mobile com Calabash Android - Parte 1

10/ago

Neste primeiro post da série (de dois posts) iremos aprender a como configurar e criar uma feature no Calabash, mas sem criar o teste propriamente disso. Esta teoria (e prática) é necessário para conhecer como o Calabash Android funciona.

Introdução

Existem diversas ferramentas de mercado para testar aplicações Android funcionalmente na interface gráfica. Hoje aprenderemos uma ferramenta utiliza todo o potencial do BDD - Behavior Driven Development para a criação e execução de testes para Android baseados em especificação por exemplos.

O que é o Calabash?

É uma ferramenta de automação de teste para Android e iOS que suporta aplicações nativas e híbridas.

Calabash é open source desenvolvido e mantido pela empresa Xamarin, sendo que esta oferece serviços para a ferramenta, como execução na nuvem.

O desenvolvimento com Calabash é feito na linguagem Ruby.

BDD

O Calabash utiliza a técnica de BDD - Behavior Driven Development para viabilizar a criação e execução dos scripts de teste. O BDD, entre outras coisas:

  • Facilita a comunicação entre o time (cliente, desenvolvedores, negócio, teste, etc…) através de uma linguagem ubíqua
  • Trabalha com os moldes de teste de aceitação, que é uma documentação clara do que deve ser desenvolvido e entregue
  • É ligado com a especificação da funcionalidade, sendo esta uma especificação executável apresentando os pontos de falha na execução do teste de forma clara e direta

Gherkin

Ele é um padrão de escrita para uma especificação executável que, através de palavras chave, mantém um padrão para escrita de critérios de aceite e execução chamado de Given (Dado), When (Quando) e Then (Então).

Não vou me aprofundar neste tópico, então fica um tema para casa ler os links abaixo:

Explicação sobre o conceito do Given, When e Then (Em inglês)

https://github.com/cucumber/cucumber/wiki/Given-When-Then

Entendendo BDD com Cucumber (Camilo Ribeiro)

http://www.bugbang.com.br/entendendo-bdd-com-cucumber-parte-i/

Pré Condição

Você precisa, além de ter o Ruby instalado na sua máquina e a gem do calabash-android um dispositivo para execução. A recomendação é que você utilize um emulador AVD ou Genymotion para o mesmo. Já tomaremos como base que você já tenha um emulador com alguma versão do Android executando. E para os próximos passos, mantenha o emulador executando.

Veja aqui, caso você não tenha estes itens acima, e também não tem o Android SDK instalado em sua máquina, siga os vídeos de pré condição antes de executar qualquer ponto neste post:

http://qualister.info/treinamentos/calabash/pre_condicoes/index.html

Passos de criação do teste

Há um processo bem simples para a criação de testes com Calabash, que são:

  1. Criação da Estrutura
  2. Escrever a Feature
  3. Executar a Feature
  4. Criar os Steps Definitions
  5. Identificar os elementos pelo console
  6. Atualizar os Steps Definitions
  7. Executar a Feature

Criação da Estrutura

O Calabash possui uma estrutura inicial onde não será necessário efetuar nenhuma configuração, apenas executar um comando para que a estrutura seja criada e o Calabash pronto para uso.

O comando calabash-android gen é o comando de geração desta estrutura.

Ele deve ser executado (recomendado) no diretório raiz da app (código-fonte) ou em uma pasta onde esteja o arquivo .apk.

Neste post usaremos apenas o arquivo .apk

O comando de criação da estrutura adiciona uma pasta chamada ‘features’. Nela há apenas duas coisas com que nos preocupar:

  • Adicionar os arquivos .features na raiz da pasta ‘features'
  • Adicionar os Steps Definitions no diretório ‘steps_definition'

Prática

Execute os passos abaixo para viabilizar o aprendizado deste tópico:

  1. Crie uma pasta no C:\ (ou em outra pasta de sua preferência) chamada Calabash
  2. Baixe o arquivo .apk do TriânguloApp neste link
  3. Coloque o arquivo TrianguloApp.apk na pasta Calabash
  4. Abra o Prompt de Comando e navegue até a pastado Calabash com o comando cd C:\Calabash
  5. Execute o comando calabash-android gen e pressione ENTER para confirmar a geração do Calabash

Como resultado esperado você verá a pasta features adicionada ao diretório.

Desenvolvendo a feature

Escrevendo a Feature

A primeira coisa que iremos aprender é que uma feature deve ter, obrigatoriamente, a extensão .feature e pode (muito recomendado) escrever a feature em qualquer ferramenta de texto (NotePad, Sublime, Athom, NotePad++, etc…)

Teremos a seguinte estrutura:

  • Palavra chave Funcionalidade
  • Palavra chave Cenário
  • Palavras chaves Dado, Quando, Então

Nós iremos utilizar o TrianguloApp para automatizar o cenário de um triângulo equilátero, que possuem os três lados iguais.

O exemplo da nossa feature será o seguinte:

# language: pt
# encoding UTF-8
Funcionalidade: Calculo de triângulo
   Cenário: Calculando um triângulo equilátero
      Dado que estou na tela do TrianguloApp
      Quando eu preencher o campo Lado 1 com "3"
        E eu preencher o campo Lado 2 com "3"
        E eu preencher o campo Lado 3 com "3"
        E eu clicar em Calcular
      Entao a mensagem "O triângulo é Equilátero" sera exibida

Este arquivo (feature) deve ser salvo no diretório features gerado automaticamente pelo comando

calabash-android gen

Prática

Execute os passos abaixo para viabilizar o aprendizado deste tópico:

  1. Abra seu editor de texto favorito e salve o arquivo, mesmo sem ter nada escrito, com o nome "triangulo.features" na pasta C:\Calabash\features
  2. Escreva no arquivo o mesmo exemplo de feature acima (tente realmente escrever porque no copiar e colar algum caractere pode mudar)
  3. Salve novamente o arquivo

Como resultado esperado você terá o arquivo escrito e salvo dentro da pasta features.

Executando a Feature

Uma vez com a feature criada devemos executa-la para gerar uma estrutura (snippet) que é o step definition (explicação abaixo).

Mas antes da execução para a geração do snippet é necessário assinar a apk com a chave de debug (ou a própria chave de distribuição).
Neste momento assinaremos com a chave de debug (mais comum) para poder executar o teste.
Utilizaremos o seguinte comando:

calabash-android resign <arquivo.apk></arquivo.apk>

A primeira execução sempre falhará, mas irá gerar os passos para implementação baseados nas palestras chaves Dado, Quando e Então (a palavra “E” é um predicado que fica similar a palavra chave acima dele, no caso o Quando).

Executamos a feature através do comando

calabash-android run <apk> <feature>\<arquivo.feature>

O comando completo para nosso exemplo será

calabash-android run TrianguloApp.apk features\triangulo.feature

Prática

Execute os passos abaixo para viabilizar o aprendizado deste tópico:

  1. No Prompt de Comando execute: calabash-android resign C:\Calabash\TrianguloApp.apk e aguarde alguns instantes
  2. Ainda no Prompt de Comando execute: calabash-android run C:\Calabash\TrianguloApp.apk C:\Calabash\features\triangulo.feature

Como resultado esperado você verá uma nova pasta chamada test_servers e o Prompt de Comando executando diversas ações e, por fim, a apresentação do snnipet como a imagem abaixo:

Criando os Steps Definitions

Uma vez executado a feature pela primeira vez é necessário criar os steps definitions.
Ele é a ligação entre o arquivo .feature e o código que iremos executar, sendo que este código ficará dentro de cada steps definition.

Para criar iremos executar dois passos:

Passo 1

Copiar todo o texto do Prompt de Comando (igual o da imagem acima) [1] a partir do final do texto “Dado” até o último “end” (o texto será o mesmo abaixo)

Dado(/^que estou na tela do TrianguloApp$/) do
   pending # express the regexp above with the code you wish you had
end

Quando(/^eu preencher o campo Lado (\d+) com "(.*?)"$/) do |arg1, arg2|
   pending # express the regexp above with the code you wish you had
end

Quando(/^eu clicar em Calcular$/) do
   pending # express the regexp above with the code you wish you had
end

Entao(/^a mensagem "(.*?)" sera exibida$/) do |arg1|
   pending # express the regexp above with the code you wish you had
end
[1] Para copiar o texto no Prompt de Comando você precisa clicar bom o botão direito sobre o título da janela e selecionar o item “Marcar”. Depois marcar todo o trecho do texto e pressionar ENTER. O texto já estará copiado para a área de transferência.

Passo 2

Colar o texto copiado no seu editor de texto preferido e salvar com o seguinte nome do diretório steps_definition: “triangulo_steps.rb"

Agora remova todos os textos “pending # express the regexp above with the code you wish you had” e salve o arquivo.

O arquivo agora foi alterado para suportar cada passo. Note que o Quando está com o texto do lado diferente (Lado (\d+) ) e foi alterado.

Agora o arquivo está assim:

Dado(/^que estou na tela do TrianguloApp$/) do<br>end

Quando(/^eu preencher o campo Lado 1 com "(.*?)"$/) do |lado1|<br>end

Quando(/^eu preencher o campo Lado 2 com "(.*?)"$/) do |lado2|<br>end

Quando(/^eu preencher o campo Lado 3 com "(.*?)"$/) do |lado3|<br>end

Quando(/^eu clicar em Calcular$/) do<br>end

Entao(/^a mensagem "(.*?)" sera exibida$/) do |mensagem|<br>end

Deixe o seu arquivo triangulo_steps.rb igual ao acima.

Algumas observações sobre o arquivo:

  • Note que todo texto que no arquivo .feature estava com aspas duplas acabou virando um parâmetro, que é expresso pelo |texto|. Num primeiro momento o próprio Calabash coloca os parâmetros como |arg1|, |arg2| e assim por diante.
  • No exemplo acima eu alterei o nome dos parâmetros para os que estão sendo apresentados no exemplo.

Fim da primeira parte 

Chegou ao fim nossa primeira parte sobre como utilizar o Calabash Android para automação de teste para dispositivos Android.
Aprendemos o que é o Calabash, como ele funciona (baseado no Gherkin) e como estruturar a feature em código para posterior execução.

Até o próximo post!

POSTS RELACIONADOS

AGENDA

CURSOS RELACIONADOS