O blogue da AWS

Testando aplicativos iOS no AWS Device Farm utilizando Appium – Parte 1

 

Por Paulo Miguel Almeida, Solutions Architect

Pré-requisitos, preparando o ambiente e criação de testes

Com o AWS Device Farm, você pode rapidamente testar aplicativos Android, iOS and FireOS em dispositivos reais na nuvem. Você simplesmente faz o upload do seu app, escolhe o framework de teste e os dispositivos nos quais você quer testar seu aplicativo e pronto. O AWS Device Farm irá lhe fornecer os resultados desses testes incluindo status de sucesso/erro, logs, métricas de desempenho, screenshots e vídeos.

O objetivo dessa série composta por três partes é detalhar passo a passo como testar um aplicativo iOS utilizando o AWS Device Farm. O framework de automação de testes que utilizaremos será o Appium e vamos escrever nossos casos de teste utilizando o TestNG framework. Desenvolver um aplicativo iOS não faz parte do escopo deste tutorial, contudo para seguir o passo a passo desse post um aplicativo iOS exemplo será disponibilizado para download aqui.

Ao final dessa série de posts você terá o conhecimento necessário para testar um aplicativo iOS utilizando o AWS Device Farm usando Appium e TestNG.

 

Pré-requisitos:

  • Java 8
  • IntelliJ IDEA CE: Para este tutorial foi utilizado a versão 2016.1.2
  • XCode: Para este tutorial foi utilizado a versão 7.3
  • Appium 1.5.2: Se você não trabalhou antes com Appium então sugerimos ler a documentação do Appium antes de continuar. Utilizaremos o Appium GUI para este tutorial. Certifique-se que você instalou a última versão do Appium GUI.
  • Apache Maven 3.3.3: Ou a versão mais recente.
  • Uma conta AWS e um usuário IAM com as permissões necessárias: Siga os passos descritos na seção de configuração do AWS Device farm.

 

Introdução ao Appium

Appium é um framework de automação de testes que tem como função executar sua suíte de testes em aplicativos iOS e Android sem que você tenha que modificar seu aplicativo ou criar diferentes suítes de testes para o mesmo. Isso é possível devido ao fato que o Appium utiliza o Selenium WebDriver do qual segue um protocolo cliente-servidor. Através deste protocolo o framework recebe e responde estes comandos seguindo um paradigma de requisição / resposta no qual requisições são enviadas ao Appium e respostas são recebidas pelo cliente via WebDriver.

Os testes são executados como listado abaixo:

  1.  Testes para aplicativos iOS ou Android são escritos em uma linguagem de programação suportada pelo WebDriver. Vale ressaltar que o Appium fornece bibliotecas client-side para muitas linguagens.
  2.  O servidor do Appium é executado após a instalação e configuração na máquina de teste.
  3. Os testes são iniciados na máquina cliente.
  4. Appium começará a receber estes comandos do cliente (máquina executando os testes) e executá-los em um emulador ou dispositivo real

 

Construindo o projeto iOS de exemplo

Descompacte o aplicativo exemplo e navegue até sua pasta utilizando o terminal. Feito isso, execute o comando ‘xcodebuild -showsdks’. Isso permitirá saber para qual SDK devemos compilar para que o Appium execute. O resultado deve ser algo similar a isto:

Vamos utilizar o ‘iphonesimulator9.3’ nesse tutorial. Tudo que precisamos fazer agora é construir o projeto para informarmos ao Appium antes de ele executar nossos testes. Isso pode ser feito através do seguinte comando ‘xcodebuild -arch i386 -sdk iphonesimulator9.3’. Assim que o processo terminar você deverá ver algo similar a isso:

Uma vez o TodoList.app construido com sucesso nós vamos configurar o Appium para ele execute nosso app ao iniciar. A vantagem dessa abordagem é que não precisamos especificar em nossos casos de teste nenhuma configuração específica do dispositivo e assim o tornando reutilizável. Configure o App path, Force device e Platform version conforme a imagem abaixo:

Inicie o Appium server através do botão de Launch.

Agora que listamos os requisitos e falamos um pouco sobre o Appium é hora de começarmos a criar nossos casos de teste para o aplicativo iOS exemplo que você fez o download.

 

Criando um projeto maven no IntelliJ IDEA

Abra o IntelliJ IDEA CE e crie um projeto do tipo Maven para começarmos escrever nossos casos de testes. Isso pode ser feito através de Create New Project -> Maven

Preencha os dados exigidos pelo maven como o groupId (geralmente o domínio/subdomínio invertido) e o artifactId (nome do seu projeto) como mostrado abaixo:

Montando o ambiente

Adicionando as dependências necessárias do Appium e TestNG.

No pom.xml adicione as seguintes dependências:

 

Estrutura do projeto

Crie os diretórios com.amazonaws.mobile.appiumiostest no diretório src/test/java e crie uma classe chamada SampleAppiumTest.

 

Código da classe SampleAppiumTest

package com.amazonaws.mobile.appiumiostest;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.io.File;
import java.net.URL;

public class SampleAppiumTest {

private static RemoteWebDriver driver = null;

private boolean takeScreenshot(final String name) {
String screenshotDirectory = System.getProperty("appium.screenshots.dir", System.getProperty("java.io.tmpdir", ""));
File screenshot = driver.getScreenshotAs(OutputType.FILE);
return screenshot.renameTo(new File(screenshotDirectory, String.format("%s.png", name)));
}


@BeforeMethod
public void setUp() throws Exception {
DesiredCapabilities capabilities = new DesiredCapabilities();
URL url = new URL("http://localhost:4723/wd/hub");
driver = new RemoteWebDriver(url, capabilities);
}


@Test

public void test01() throws InterruptedException {
driver.findElement(By.xpath(“//*[@name=\”Add\”]”)).click();
driver.findElement(By.xpath(“//UIATextField[@visible=\”true\”]”)).sendKeys(“Comprar livros”);
driver.findElement(By.xpath(“//*[@name=\”Salvar\”]”)).click();
takeScreenshot(“screenshot1”);
}

@Test
public void test02() throws InterruptedException {
driver.findElement(By.xpath(“//*[@name=\”Add\”]”)).click();
driver.findElement(By.xpath(“//UIATextField[@visible=\”true\”]”)).sendKeys(“Estudar o AWS Device Farm”);
driver.findElement(By.xpath(“//*[@name=\”Salvar\”]”)).click();
takeScreenshot(“screenshot2”);
}

@Test

public void test03() throws InterruptedException {
driver.findElement(By.xpath(“//*[@name=\”Add\”]”)).click();
driver.findElement(By.xpath(“//*[@name=\”Cancelar\”]”)).click();
}

@AfterMethod
public static void tearDownClass() {
if (driver != null) {
driver.quit();
}
}

}

 

Executando os casos de teste

 

Agora que o ambiente esta configurado e executando e os casos de testes já foram implementados, vamos executar nossos testes.

 

Evoluindo seus casos de teste

Para capturar os elementos de interface de usuário e suas interações, utilizamos o Appium Inspector. Caso queira fazer esse processo, você pode clicar no simbolo de lupa no Appium GUI. Este passo considera que você já configurou o Appium corretamente (App Path, Force device, platform version) como mostrado anteriormente.

 

Resumo

 

Você deve possuir agora um ambiente configurado, um aplicativo iOS compilado em um arquivo chamado TodoList.app e um projeto maven configurado no IntelliJ IDEA com seus testes utilizando TestNG. Com isso você já será capaz de rodar sua suíte de testes localmente com o Appium e validar-los. Na segunda parte desse tutorial vamos fazer um passo a passo de como preparar sua suite de testes para fazer upload para AWS Device Farm. Finalmente na parte 3, vamos executar os testes que criamos no AWS Device Farm e explorar seus resultados.