O blog 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:
- 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.
- O servidor do Appium é executado após a instalação e configuração na máquina de teste.
- Os testes são iniciados na máquina cliente.
- 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.