escrito por: Fagner Muniz
atualizado em: 16 de fevereiro de 2024

artigo

Testes de interface com AppCenter na prática

Olá meu caro/minha cara, obrigado por estar aqui, espero que você esteja muito bem, animado para aprender e compartilhar conhecimento.

Vamos para segunda parte de integração contínua voltada para dispositivos móveis. Desta vez vamos falar sobre uma parte importante e geralmente esquecida … os testes de interface.

O Microsoft AppCenter fornece vários recursos incríveis que possibilitam acompanhar a “saúde” do seu aplicativo como o AnalitcsCrashes e os Testes.

Vantagens de utilizar os recursos de testes do app center:

  • Testes em dispositivos reais
  • Logs dos dispostivos e do framework de teste
  • Execução simultânea em varios dispositivos

Suporte aos principais framework de testes como:

  • Appium (Java com JUnit)
  • Calabash (Ruby com Cucumber)
  • Espresso (Java ou Kotlin)
  • Xamarin.UITest (C# ou F# com NUnit)
  • XCUITest (Swift ou Objective-C)

A ideia principal é que a cada commit no repositório ligado ao app center, seja gerado o build, para construir e validar o código, executado os testes de interface para garantir que as funcionalidades principais da aplicação sejam validadas antes de serem publicadas na loja ou disponibilizada para um grupo de emails.

Temos duas linhas de trabalho neste cenário, os desenvolvedores que estarão produzindo de fato o aplicativo, subindo os códigos no git e a cada push será iniciado o nosso processo de distribuição. E os testers que estarão escrevendo a automação utilizando o Appium(Java), versionando o código como uma boa prática, mas este codigo java não faz parte do build do app center, então como o app center executa meu cenário de teste ?.

Vamos entender o fluxo do QA…

O cenário que será demonstrado aqui é uma navegação das seguintes telas(Splash, Login, Listagem de eventos e dados do evento selecionado)

Rodando Teste Local

Pelo terminal instalamos o Maven, o appium, o appcenter-cli através dos comandos npm install e criamo um projeto Maven utilizando o eclipse IDE.

Primeiro passo para escrever nosso teste é incluir no arquivo pom.xml a dependencias e preparar o pacote, o arquivo completo você pode visualizar clicando aqui.

Agora vamos de fato escrever nosso teste, criei uma nova classe StartAppTest.java, vamos incluir nossos imports do appcenter

import com.microsoft.appcenter.appium.Factory;
import com.microsoft.appcenter.appium.EnhancedAndroidDriver;
import org.junit.rules.TestWatcher;
import org.junit.Rule;

A nossa classe java:

public class StartAppTest {
    @Rule
    public TestWatcher watcher = Factory.createWatcher();

    private static EnhancedAndroidDriver<MobileElement> driver;

    public static EnhancedAndroidDriver<MobileElement> startApp() throws MalformedURLException {
        DesiredCapabilities capabilities = new DesiredCapabilities();

        capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "android");
        capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Pixel 2");
        capabilities.setCapability(MobileCapabilityType.APP, "D:/Projetos/Dextra/AppCenter-Samples/Appium/Android/com.dextra.dextragames.apk");
        capabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 7913);
        capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "uiautomator2");

        URL url = new URL("http://localhost:4723/wd/hub");

        return Factory.createAndroidDriver(url, capabilities);
    }


    @Test
    public void canStartAppInTest() throws MalformedURLException, InterruptedException {
        driver = startApp();
		driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        
        driver.findElementByXPath ("//android.widget.TextView[@text='Log in with Google']").click();
    	System.out.println(driver.findElementByXPath ("//android.widget.TextView[@text='DEXTRA GAMES']").isDisplayed());
    	driver.findElementByXPath ("//android.widget.TextView[@text='Happy Hours']").click();
    	System.out.println(driver.findElementByXPath ("//android.widget.TextView[@text='Happy Hours']").isDisplayed());
    	
        Thread.sleep(5000);
    }

    @After
    public void after() throws Exception {
        if (driver != null) {
            driver.label("Stopping App");
            driver.quit();
        }
    }
}

Vamos entender um pouco do código:

  • Na linha 3, estamos criando um objeto do TestWatcher, esta declaração é obrigatória para cada um dos seus testes.
  • Na linha 4, escolhemos o drive de testes, no nosso caso android, para iOS utilizariamos o EnhancedIOSDriver
  • O método da linha 7 esta configurando o driver com os dados do emulador, apk e do servidor do appium

No gerenciador de dispositivos do android obtemos os dados necessários do nosso emulador

Já o Apk o seu desenvolvedor poderá lhe fornecer.

A url do servidor appium, basta rodar no terminal o comando appium

  • Na linha 23, temos de fato o nosso método de teste, repare que precisamos incluir na linha de cima a anotação @Test
  • Na linha 24, o appium irá instalar e executar o apk no nosso emulador
  • Na linha 27, estamos procurando e clicando elemento com o texto “Log in with Google”
  • Na linha 28, estamos verificando se encontramos um elemento na tela com o texto “Dextra Games”
  • Na linha 29, clicando no item com o texto “Happy Hours”
  • Na linha 30, verificando se tem algum elemento com o texto “Happy Hours” na tela, (titulo da página de detalhe do evento)

Agora basta rodar o aplicativo e visualizar a aplicação rodando “magicamente”, ao final da execução o terminal esta mostrando o tempo que o teste foi executado localmente e se o teste deu certo

Já no console da IDE temos a seguinte saida

Qual teste foi executado, 2 true que são referente as linhas 28 e 30, ou seja ele encontrou os elementos na tela, na linha abaixo temos uma screenshot do resultado do test, que podemos abrir navegando até o diretório.

Subindo o Teste no App Center

Tudo certo … vamos subir este cenário de teste no appcenter.

Vamos abrir o AppCenter, realizar login e abrir o nosso aplicativo.

Vamos clicar no menu Test e Test runs

No canto superior direito selecionar o botão azul New test run

Agora vamos escolher em qual dispositivo queremos que o nosso teste execute, podendo realizar os seguintes filtros, lembrando que o teste será executado em um dispositivo real.

  • OS Version: Versão da API do android
  • Tier: 1, 2 ou 3, sendo o 1 os dispositivos mais usados.
  • Manufacturer: Fabricante ( Sansung, Motorola, Huawei e outros)
  • Memory: Memória do telefone
  • CPU: Capacidade do processador do telefone.

Eu escolhi um dispositivo na versão 9, um na versão 7 e um na 5.1.1.

O nosso aplicativo está configurado propositalmente com versão mínima Android 7, então eu quero validar que não será executada minha aplicação no android 5.1.1.

Na tela seguinte escolheremos o Test series, que será um agrupador do nossos testes, o idioma e o framework de teste, no nosso caso o Appium.

Clicando em next copiaremos os comandos build e upload e podemos clicar em done

Estes comandos iremos executar no terminal, dentro da pasta do aplicativo.

o primeiro comando que faremos no terminal é responsavel por preparar o pacote de teste (.Jar) para o upload no App Center.mvn -DskipTests -P prepare-for-upload package

Apos a execução do comando, se tudo der certo, aparecerá BUILD SUCCESS

Agora só executar o segundo comando e esperar o upload 🙂
appcenter test run appium –app “APP_ID” –devices “DEVICE_SET_ID” –app-path PATH_TO_FILE.apk –test-series “main” –locale “en_US” –build-dir target/upload

Nosso cenário aceitou os dispositivos com a versão superior a 7 e rejeitou a versão 5.1.1 por não atender a especificação mínima.

Ao finalizar o upload, podemos visualizar todo o cenario de teste direto no app center

É apresentado que rodou o teste canStartAppInTest, que é o nome do nosso método da classe StartAppTest nos dois dispositivos aceitos, clicando no teste temos os artefatos e log da execução em cada dispositivo.

Conclusão

O teste de interface do app center ajuda muito a reduzir o trabalho de retestar a aplicação toda vezes que houver uma nova funcionalidade, garantindo uma qualidade mais alta, além do acompanhamento no uso de hardware que a aplicação esta consumindo no telefone dos seus usuários.

Os artefatos disponíveis após os testes também permitem que a equipe responsável tenham recursos para aprovar e homologar a versão de uma forma mais precisa e rapida.

Este recurso de teste esta disponível na versão trial gratuitamente por 30 dias, as versões pagas são apatir de 99 dolares/mês.