Appium: Automação para apps Mobile

Bruno Carvalho
BRQ Tech
Published in
7 min readJan 21, 2020

Parte II

Continuando a nossa série sobre automação mobile utilizando o Appium, 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:

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 (o que na verdade a automação irá te ajudar é ter minimamente cenários automatizados para a sua regressão, deixando mais tempo para testar as funcionalidades mais complexa, fluxos alternativos e realizando testes exploratórios). Neste 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?

comando para listar os pacotes

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

Copie o package do seu app (depois dos :)

os pacotes estão listados

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

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).

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:

comandos para criar o projeto

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

estrutura do projeto no vscode

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

o app na pasta support

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

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 quatros 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

Inicie o servidor do appium clicando em Start Server:

Appium Sever Desktop

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

steps gerados pelo cucumber

Neste 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.

steps gerados

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

Appium Server Desktop

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

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

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

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

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

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

Dentro do elemento “digit_3” e “digit_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 deste 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

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

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

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

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!!!

Aguarde o nosso próximo post que será sobre ScreenObjects.

Você pode conferir este projeto no GitHub do Thialisson que também é autor do artigo:

Autores do artigo:

--

--

Bruno Carvalho
BRQ Tech

QA Dev | Interested in Software Development | Music | NFL Fan