Automação de teste End to End de uma aplicação Android com Appium e Java
Atualmente, a área de desenvolvimento de sistemas tem enxergado cada vez mais benefícios em automatizar os testes de aplicação. Sejam eles teste unitário, integrado, comportamental ou automatizado, as vantagens ficam claras a cada nova atualização ou necessidade de conhecer o comportamento de um sistema.
Automatizar é bom. Tem vezes que é mais rápido rodar um teste automatizado já pronto do que fazer um manual. Os testes automatizados não vão substituir todos os testes manuais. Utilize a automação para aumentar a abrangência de testes, começando unitariamente e aumentando gradativamente no produto.
Automação de testes não significa que, num passe de mágica, o teste de software será mais rápido, mais confiável, ou muito menos que nunca mais teremos erros nos sistemas.
Um dos motivos que impedem algumas pessoas de iniciar a automação de testes é o fato de precisarem ter conhecimento em alguma linguagem de programação. Isso pode assustar no início, mas no decorrer das execuções você verá que não é necessário ser um especialista em desenvolvimento de sistemas para montar os scripts de teste. Mas é necessário um conhecimento em programação, e que se tenha noção de alguma linguagem, tal como Java, C# ou Ruby, que são as mais utilizadas para automação. A área também exige o conhecimento em orientação a objetos, controle de loops e tratamento de exceções e condições.
Neste breve tutorial, irei mostrar como começar um projeto de automação utilizando algumas ferramentas que uso no meu dia a dia, que são Intellij, Appium e Java. Será algo simples que irei mostrar. O projeto será uma automação de funções matemáticas utilizando a calculadora do próprio celular Android.
Primeiramente, certifique-se de ter instalado em sua máquina:
- IDE Intellij (https://www.jetbrains.com/idea/), que será utilizada para a criação dos nossos scripts de teste;
- o Android Studio (https://developer.android.com/studio/?hl=pt-br), porque iremos utilizar o emulador Android que ele fornece (AVD);
- e ter o Java 8 ou 11 instalado na sua máquina.
E já deixe um emulador Android (AVD) do Android Studio rodando, pois iremos utilizá-lo para realizar os testes.
Agora, vamos criar nosso projeto para iniciar os testes. Iremos iniciar o IntelliJ, selecionando Create New Project:
E criaremos um projeto Gradle selecionando a opção Gradle, à esquerda:
Clique em Next:
Preencha o GroupId e o ArtifactID, como na imagem, e clique em Next:
Depois, escolha onde você quer salvar o projeto e clique em Finish. Assim ficará a estrutura após esses passos iniciais:
Agora temos que configurar os plugins do Cucumber e do Gherkin no IntelliJ. Temos que ir em File -> Preferences e pesquisar por plugins. Depois disso, pesquisaremos pelos plugins do Cucumber e do Gherkin e instalaremos, assim como na imagem:
Agora iremos restartar o IntelliJ. Assim que ele abrir novamente, iremos configurar nosso arquivo build.grade com as dependências necessárias para a automação, ficando assim:
Depois de ter feito as configurações iniciais, podemos começar a escrever nossos cenários de teste com o Cucumber. Clique com o botão direito em Resources -> New -> Directory. E colocaremos no Name Feature.
Depois de criar o Directory, clique com o botão direito nele, New -> File, e nomearemos esse File como teste_calculadora.feature. Todo arquivo de cenário de teste com Cucumber deve possuir a extensão .feature.
Após a criação do arquivo do cenário de teste, iremos começar a escrever os cenários com a escrita Gherkin. O arquivo ficará igual ao da imagem, usando o enconding utf-8 para aceitar acentuação, e language pt para aceitar a escrita em português. Eu utilizei Esquemas de cenário porque há algumas validações e resultados diferentes, mas também podemos utilizar quando os cenários têm resultados parecidos.
Agora iremos começar com a codificação em Java. Clique com o botão direito na pasta em que está escrito Java. Vamos em New -> Package e iremos colocar o nome de configuration.
Nesse package criado, clique com o lado direito do mouse em New -> Java Class. E colocaremos o nome de DriverFactory. Nesse arquivo, vamos configurar nossas capabilities, que são as chaves e os valores que dizem para o Appium Server para informar qual tipo de sessão desejamos iniciar. É por meio dele que informamos em qual dispositivo queremos executar e quais são as configurações iniciais. Ele ficará igual ao da imagem:
Continuaremos com a codificação em Java. Clique com o botão direito novamente na pasta em que está escrito Java, vá em New -> Package e coloque o nome de Runners.
Após ter criado o package, clique com o botão direito em New -> Java Class e colocaremos o nome de AndroidTest.
O arquivo AndroidTest será responsável por rodar a automação. Nele iremos colocar o caminho da nossa feature com os cenários de teste e o DriverFactory que possui a configuração do Appium e suas capabilities, informando o projeto que será executado. Ele ficará igual ao da imagem:
Iremos clicar na pasta do java novamente e criaremos um arquivo no package chamado Screens. Nesse package, iremos colocar os arquivos que representam nosso screen da calculadora e um arquivo chamado BasePage, que será implementado pelos nossos Screens.
Nesse novo package, chamado Screens, clique com o botão direito em New -> Java Class e crie a BasePage. Sua estrutura ficará igual à da imagem:
Antes de criar o arquivo de screen da calculadora, instale o Appium, que é um Framework de testes automatizados mobile com suporte a simuladores e execução em aparelhos reais para plataformas iOS e Android. Com ela é possível automatizar testes mobile independente da linguagem de programação utilizada. Neste link estão disponíveis os links do Appium para cada versão de sistema operacional:
https://github.com/appium/appium-desktop/releases/
Caso você utilize Linux, terá que realizar esses comandos no terminal:
- chmod a+x Appium-linux-1.15.1.AppImage – com esse você irá dar permissão de executável no arquivo;
- ./AppImage – e com esse irá executar o arquivo.
Após ter feito o download e instalado o Appium, vamos em Advanced:
Marque a opção Relaxed Security e inicie o Appium clicando em Start Server.
Após iniciar o Appium, clique em Start Inspector Session. Vamos em Desired Capabilities e, em JSON Representation, preencha da mesma forma que está na imagem e clique em salvar. E depois no Start Session:
Nesse aplicativo, iremos pegar os id’s dos botões da calculadora e do resultado das funções matemáticas que iremos utilizar na automação e no nosso arquivo de screen. Agora é só clicar no campo desejado que o id aparecerá na esquerda, como na imagem:
Após realizar esses passos, podemos começar a criar nosso arquivo de Screen. No package chamado screens, clique com o botão direito em New -> Java class e crie o Screen chamado CalculadoraScreen.
Ele ficará com a estrutura da imagem, em que os RemoteWebElement são os nossos botões e o campo de resultado, e o @AndroidFindBy com o id dos botões que pegamos com o aplicativo do Appium é como ele encontra o elemento. Os métodos possuem a ação de clicar e retornam o texto que o botão possui, pois iremos utilizar esse texto para realizar uma asserção na nossa classe de steps. E antes de cada ação tem um timeout de 2 segundos em cada botão, que foi configurado em uma classe que iremos fazer a seguir.
Iremos criar um novo package na pasta do Java, chamado helper:
Nesse package, iremos criar um Java Class chamado ElementHelper. Nessa classe, configuramos um tempo de espera para que o botão tenha um delay de alguns segundos antes de ser interagido. Podemos utilizar esse tipo de ação quando um botão ainda não esta visível na tela ou quando ainda não foi carregado.
Agora iremos criar um novo package na pasta do Java, chamado steps:
No package steps, iremos criar um Java Class chamado FuncoesMatematicasSteps, em que essa classe é responsável por executar nossos cenários de teste que fizemos no nosso arquivo .feature. E em cada passo do cenário chamaremos nosso screen com as ações que devem ocorrer em cada passo do teste.
Agora para o arquivo AndroidTest. Vamos clicar com o botão direito dentro do arquivo e rodaremos nossa automação.
E este deve ser o resultado esperado:
Esse foi um tutorial de como fazer uma automação de teste. O projeto está disponível no GitHub para auxiliar. Você pode fazer o clone do projeto para facilitar, mas não deixe de realizar a implementação dos códigos conforme apresentado. Isso irá ajudar a fixar os passos envolvidos nos próximos desenvolvimentos.
Em breve, faremos outro tutorial, mas com um projeto Android um pouco mais complexo. Até a próxima!
Entre em contato com a Iteris e saiba como podemos te ajudar a ter a aplicação que você imagina para o seu negócio.