Skip to main content

Hoje iremos mostrar a estrutura de um projeto de automação com cucumber + ruby + appium.

Se você já veio do nosso último post (algo que recomendo a leitura), onde explicamos o que é, como surgiu, pré-requisitos para a sua utilização e os primeiros passos com o Appium, então não perca este post sobre a estrutura de um projeto de automação mobile.

Caso você ainda não tenha conferido a primeira parte, acesse o link abaixo:

Appium: Automação para apps mobile

Vamos iniciar de onde?

Presumo que você já tenha todo o ambiente configurado, então vamos colocar a mão na massa. O primeiro passo é saber qual é o app que será testado. Provavelmente você já testa/testou o seu app manualmente e agora está buscando mais uma forma para aumentar a cobertura dos seus testes com a automação. Na verdade a automação irá te ajudar a ter minimamente cenários automatizados para a sua regressão, deixando mais tempo para testar as funcionalidades mais complexas, fluxos alternativos e realizando testes exploratórios. Nesse passo a passo irei utilizar o app da calculadora que já vem no próprio Android Oreo.

“Mas como pego um app que já está instalado no meu smartphone?”

Appium - Desktop adb shell pm list packages
Comando para listar os pacotes

O comando acima mostra todos os pacotes de apps instalados no seu celular.

Copie o package do seu app (depois dos dois pontos):

Appium: 
package: com.android.calcular2
package: com.android.gesture.builder
Os pacotes estão listados

Digite o comando adb shell pm path e cole o pacote do seu app:

Appium: adb shell pm path
Baixar o app na pasta

Copie o path do seu app e execute o comando adb pull <diretório copiado> <diretório de destino>.

Para baixar o app no seu diretório atual é necessário dar o espaço e colocar o ponto (no meu caso o app vai para a pasta Desktop).

Appium: o App está baixado.
O app está baixado

Criando o projeto

Caso ainda não possua a gem do cucumber, instale com o comando

gem install cucumber

Criando o diretório/pasta do seu projeto:

Appium: gem install cucumber
Comandos para criar o projeto

Agora que você já criou o diretório do seu projeto, acesse ele pelo seu editor de texto favorito (o meu é o VSCode):

VSCode
Estrutura do projeto no VSCode

Vamos colocar o nosso app dentro da pasta/features/support do nosso projeto:

Appium: O app na pasta support
O app na pasta support

Agora vamos abrir o arquivo env.rb e iniciar a nossa configuração de ambiente:

Appium: Capabilities no env.rb
Capabilities no env.rb

Acima carregamos na memória as gems do Appium e do Cucumber, definimos as capabilities do nosso app, iniciamos e finalizamos o driver do Appium a cada execução.

No primeiro post explicamos o que são capabilities, o que significa cada argumento e como conseguir os dados para preenchê-los.

Escrevendo os cenários

Como estamos testando um app de calculadora, nada mais justo do que começar escrevendo o cenário de uma das quatro principais operações de uma calculadora.

Crie o arquivo dentro da pasta features com a extensão .feature e escreva o cenário utilizando o BDD:

Descrição do cenário no BDD
Descrição do cenário no BDD

Inicie o servidor do Appium clicando em Start Server:

Appium Sever Desktop
Appium Sever Desktop

Acesse o seu projeto pelo terminal e execute o comando cucumber:

Steps gerados pelo Cucumber
Steps gerados pelo Cucumber

Nesse momento o Cucumber gera os steps definitions. Mas, como os steps estão indefinidos, o Appium não executará nenhuma ação.

Crie o arquivo multiplicar_steps.rb dentro da pasta step_definitions.

Copie e cole os snippets gerados do seu terminal no arquivo criado.

Appium: Steps gerados
Steps gerados

Na sessão aberta, preencha os campos conforme as capabilities que estão no seu env.rb:

Appium Server Desktop
Appium Server Desktop

Clique em Start Session e aguarde o Appium subir o app no seu device:

Appium com a inspeção dos elementos
Appium com a inspeção dos elementos

O nosso primeiro step valida se o app foi aberto corretamente. Uma das formas de verificar isso é identificando um elemento do app na tela inicial e validar se ele foi aberto corretamente:

Appium server desktop mostrando os elementos
Appium server desktop mostrando os elementos

Como nosso app tem um id para identificar a tela principal, podemos utilizá-lo e validar dentro do nosso step:

Validar se ele mostrará o elemento
Validar se ele mostrará o elemento

Agora precisamos multiplicar 3 por 9, de acordo com a nossa especificação do BDD:

O step quando multiplicando 3 por 9
O step quando multiplicando 3 por 9

Precisamos mapear os elementos da tela que são as teclas 3, 9, operação de multiplicação e o “=”. Faremos isso neste step:

O step quando implementado
O step quando implementado

Acima, mudei as variáveis int e int1 para a e b. Em seguida, mapeei os elementos citados.

Dentro dos elementos digit_3digit_9, realizei uma interpolação com as variáveis a e b que contêm os valores 3 e 9 que estão nos steps do nosso cenário. Ou seja: quando você mudar os valores do seu BDD, automaticamente esses valores serão passados para as variáveis.

Por fim, faremos o nosso querido assert dentro do Então. Para começar, precisamos pegar o valor do resultado da multiplicação. Como faremos isso?

É só mapear o resultado, verificar se ele possui id (que é o nosso caso) e pegar o texto desse elemento:

App server desktop com o elemento
App server desktop com o elemento

O id do elemento é result. Com o método .text pegamos o valor que contém no atributo texto do elemento.

Sabendo disso utilizamos uma condição dentro do nosso teste para caso o valor seja diferente de 27 o nosso Então falhe:

o step entao implementado
o step entao implementado

Lendo a nossa condição dá para entender: Falhe “Texto que será apresentado no console” a não ser que o texto do elemento seja igual ao nosso resultado.

Execute o nosso teste pelo terminal com o comando “cucumber” e veja os seguintes resultados:

a imagem indica que os testes passaram
a imagem indica que os testes passaram

Outro passo importante é criar o arquivo Gemfile, fora da estrutura da pasta features com as gems que serão utilizadas no nosso projeto:

a imagem indica as gemas do ruby
a imagem indica as gemas do ruby

Essa é a estrutura final do nosso projeto de automação mobile:

estrutura do projeto no vscode
estrutura do projeto no vscode

Dúvidas que podem surgir ao final do post

Bruno e Thialison, você faz desta forma a automação mobile? Sim e não, esse post mostra uma base de projeto para a sua automação e você pode começar com ele!!!

E o ScreenObjects? Ele fará parte do nosso próximo post, se você faz PageObject no seu projeto Web, já pode tentar neste projeto mobile.

Tentei multiplicar dezenas, quebrou o meu teste e agora? Quanto mais você souber da linguagem que está trabalhando, mais claro ficará para resolver esse problema, a melhor forma seria criando um método que te ajudará a resolver esse inconveniente. Vamos escrever sobre isso nos próximos posts também.


É isso por enquanto pessoal, tentei mostrar de uma forma simples como é a estrutura de um projeto mobile com Appium em poucos passos.

Tem bastante conteúdo sobre isso pela internet, então divirta-se!!!

Bruno Carvalho – Analista de Teste na BRQ

Sobre o Autor