Appium – Testes automáticos para Android

Android_MATERA2Já imaginou ser possível criar testes automáticos para aplicativos mobile utilizando a mesma linguagem que você está acostumado para criar os testes automáticos para outros tipos de sistemas? Como por exemplo, usar o Selenium?  Agora isso é possível com o Appium.

O Appium é um framework para automação de testes para aplicativos mobile nativas ou hibridas tanto para dispositivos Android quanto IOS.

Este framework utiliza a API WebDriver do Selenium para enviar os comandos de teste, por isso os testes podem ser escritos em diversas linguagens suportadas pelo WebDrive, incluindo Java, Objective-C, JavaScript, PHP, Python, Ruby, C#, Clojure, Perl, Haskell, e em alguns frameworks de testes como: JUnit, RSpec, PHPUnit, Nose, Mocha, Cucumber, Capybara, Vows, entre outros.

Configurações

O primeiro passo é fazer o download do servidor do Appium, o Appium Server, basta acessar este link e clicar em Download Appium.

Download Appium
Figura 1 – Download Appium

Execute o programa de instalação do Appium, seguindo as instruções fornecidas pelo sistema.

O próximo passo, é baixar a lib Java-client.jar que é a biblioteca do Java para o Appium. O download pode ser feito através do link https://github.com/appium/java-client. Nesta página é possível obter a dependência da biblioteca para quem utiliza o Maven ou fazer o download direto do jar.

Figura 2 - Biblioteca Java Client
Figura 2 – Biblioteca Java Client

É necessário também obter a biblioteca do Selenium, para isso acesse a página do Selenium, clique em “Download” e na sessão Selenium Standalone Server clique no link Download version

Figura 3 - Selenium Standalone Server
Figura 3 – Selenium Standalone Server

Depois na mesma página, porém na sessão Selenium Client & WebDriver Language Bindings faça download do driver para o Java.

Figura 4 - Selenium Client & WebDriver Language Bindings
Figura 4 – Selenium Client & WebDriver Language Bindings

Automatizando

Pronto! Configurações feitas! Até aqui tudo muito simples para começarmos a automatizar uma aplicação Android.

O aplicativo que será utilizado no post como exemplo para criar testes automáticos, é o app que criei no post Desenvolvendo para Android: Montando um aplicativo simples. Você pode criar testes automáticos para qualquer aplicativo, não é necessário possuir o código fonte, apenas o arquivo .apk. Neste link é possível fazer o download do .apk do aplicativo que será utilizado como exemplo neste post.

Crie e cole no diretório C:\app o .apk, pois é para esse diretório que o código apontará para saber por onde iniciar o aplicativo.

Para começarmos a automatizar, é necessário criarmos um projeto.

Crie um novo projeto Java no Eclipse e adicione o jar do Selenium e os do Java Client, que são as bibliotecas que fizemos download anteriormente, adicione clicando no projeto com o botão direito e acesse o meu Properties -> java build path -> Add external JARs.

Para que o Appium Serve saiba que é preciso iniciar uma nova sessão para rodar os testes, o primeiro passo é codificar os parâmetros que serão enviados para o servidor. Para isso é necessário definir Desired Capabilities. Há várias configurações que podem ser feitas, mas as mais importantes e essenciais são: qual a plataforma da aplicação, qual o dispositivo que será executado os testes e o caminho do aplicativo Android.

Definimos essas configurações com o código abaixo:

//Diretorio onde contem a apk do aplicativo que sera automatizado
File diretorioAplicacao = new File("C:\\app");
//Nome do aplicativo que deve ser
File arquivoAplicacao = new File(diretorioAplicacao, "CalculaMediaFinal.apk");
		
DesiredCapabilities capacidade = new DesiredCapabilities();
//Define que a plataforma que o teste sera executado e Android
capacidade.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
//Define que o aplicativo sera executado pelo emulador do Android
capacidade.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
//Define qual o caminho onde esta o apk do aplicativo que sera automatizado
capacidade.setCapability(MobileCapabilityType.APP, arquivoAplicacao.getAbsolutePath());
Listagem 1 – Definindo configurações para execução dos testes

Agora só precisamos começar a codificar a automação propriamente dita do aplicativo. Para isso vamos usar o Selenium.

O primeiro passo é instanciar o AndroidDriver passando a URL do servidor Appium e os parâmetros criados anteriormente.

@SuppressWarnings("rawtypes")
//Instancia o driver do Android apontando para o ip do servidor Appium e passando as configuracoes defindas acima
AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capacidade);
Listagem 2 – Setando o AndroidDriver com as configurações de execução

Depois disso é só se diverti com o Selenium.

Para descobrir o ID dos elementos basta utilizar o UIAutomatorViewerque é uma ferramenta que vem junto com o Android SDK e é utilizada para automatizar aplicações Android. Mas como vamos utilizar o Appium para os testes automáticos, iremos apenas utilizar a ferramenta para inspecionar os elementos para pegar os IDs dos componentes. Para abrir vá ao diretório do Android SDK na pasta Tools. Caso não saiba onde fica o diretório, basta acessar a variável de ambiente ANDROID_HOME, o caminho configurado é o caminho do SDK.

Com o UIAutomatorViewer aberto e o aplicativo rodando no emulador, clique no botão Device Screenshot conforme ilustrado na imagem abaixo.

Figura 5 - UIAutomatorViewer
Figura 5 – UIAutomatorViewer

Basta ir clicando nos campos que deseja e copiar o “resource-id”.

Feito a inspeção nos componentes é só fazer as chamadas dos métodos do Selenium correspondente a ação que deseja executar.  Segue uma breve descrição dos três métodos que vamos utilizar e que são os mais usados:

sendKeys(“”) – preenche o campo com a informação que for passada por parâmetro.

click() – executa a ação de clique no aplicativo.

getText() – pega o texto do componente.

Usando esses métodos é possível automatizar nosso aplicativo!! A ideia do teste é preencher os valores da nota 1, 2 e 3 e apertar o botão Calcular e validar se o resultado da média final é o valor esperado.

No primeiro trecho do código de automação, preenchemos os valores dos campos utilizando o driver do Selenium, com o id de cada componente, fazendo uso do método sendKeys para informar a nota correspondente a cada campo e depois usamos o método click para acionar o botão Calcular.

//Informa as notas do campo 1, 2 e 3
driver.findElement(By.id("com e .exemplo.calculamediafinal:id/txtNota1")).sendKeys("3");
driver.findElement(By.id("com.exemplo.calculamediafinal:id/txtNota2")).sendKeys("2");
driver.findElement(By.id("com.exemplo.calculamediafinal:id/txtNota3")).sendKeys("4");
//Clica no botao Calcular
driver.findElement(By.id("com.exemplo.calculamediafinal:id/btnCalcular")).click();
Listagem 3 – Automatizando o preenchimento dos campos de Nota e do botão “Calcular”

Por ultimo fazemos um assert com o valor retornado usando o método getText() comparando com o valor esperado, que no exemplo é 3. Pronto!! Nosso aplicativo está automatizado!!

//Compara o valor gerado no cmapo media final com o valor esperado pelo teste
Assert.assertEquals("3.0", driver.findElement(By.id("com.exemplo.calculamediafinal:id/txtMediaFinal")).getText());
Listagem 4 – Validando se a média final calculada gerou o valor esperado

O que falta agora? Apenas executar os testes! Para isso inicie o Appium Server clicando duas vezes no arquivo Appium.exe que se encontra dentro da pasta de instalação. A tela abaixo será exibida:

Figura 6 - Executando teste automatizado
Figura 6 – Executando teste automatizado

Clique no botão Play para que o servidor seja inicializado. Depois pelo Eclipse execute seu projeto de testes clicando no botão Run ou selecionando o menu Run/Run. Será aberta a janela do JUnit que vai exibir o resultado do teste ao fim da execução.

Note que quando você colocar para rodar, o aplicativo será aberto automaticamente no emulador do Android e o teste que criamos acima de preencher os campos e calcular a média será executado.

Pronto! Nosso aplicativo está automatizado 😀 . É possível fazer download do código de automação clicando aqui.

Caso queira conhecer outras ferramentas para automação de aplicativos Android veja os posts abaixo:

Robotium – http://www.matera.com/br/2014/03/27/desenvolvendo-para-android-criando-testes-automaticos/

Mockito – http://www.matera.com/br/2015/03/10/usando-mockito-em-testes-unitarios-de-aplicativos-android/

Referências

http://appium.io/

https://university.utest.com/how-to-set-up-your-first-android-automation-project-with-appium/

http://www.infoq.com/br/news/2013/06/appium-android

Por MONISE COSTA

Formada em Sistemas de Informação pela PUC Campinas, MATERANA desde 2011. Apaixonada pela área de TI, Analista de Requisitos na maior parte do tempo e desenvolvedora Java/Android por lazer.

Postado em: 09 de outubro de 2015

Confira outros artigos do nosso blog

Introdução ao Dev-Test Pairing

13 de junho de 2018

Caio Rizolli

Falando sobre Teste de Intrusão (ou PenTest)

03 de abril de 2018

Jacqueline Costa

Protractor – Testes automáticos end-to-end para aplicações em Angular

07 de dezembro de 2017

Jacqueline Costa

Testes em Node.js

04 de dezembro de 2017

Alan Cesar Elias

Deixe seu comentário