Iniciando testes mobile Android & iOS com Appium

Eu sei, você deve estar se perguntando: “o que preciso saber para automatizar o básico de testes com o Appium?”. Pois bem, ele possui muitos recursos e a ideia aqui é pincelar sobre alguns  pontos importantes, ser o start no aprendizado.

Por esse motivo, o post é um pouco teórico mesmo, mas não se preocupe, ele está organizado em tópicos e seu conteúdo é aplicável a ferramenta como um todo, independente da linguagem utilizada. Para começar vamos ver sua definição: em linhas gerais, podemos conceituá-lo como uma ferramenta para testes automatizados de aplicativos mobile Android & iOS. Recentemente, passou a ter suporte para testes de aplicações desktop e assim como o Selenium, é muito útil em projetos, facilitando a automatização dos cenários de testes.

Vejamos os tópicos:

  1. Plataformas
  2. Setup
  3. Drivers
  4. Capabilities
  5. Locators
  6. Waits & Expected Conditions
  7. Actions (interações) & Gestures (gestos mobile)

 

Vamos nessa?

1. Plataformas

Como dito, o Appium tem suporte para as principais plataformas mobile, incluindo Android & iOS. Isso significa que o sistema operacional, ferramentas e linguagem de desenvolvimento são diferentes para ambas. Parece trivial, mas entender algumas diferenças entre as plataformas envolvidas é essencial para o estudo dos demais tópicos.

Característica Android iOS
Linguagem nativa Java ou Kotlin Objective-C ou Swift
Gerenciador de pacotes nativo Gradle Swift PM, CocoaPods e Carthage
Fabricante Google Apple
Framework nativo para testes Espresso, Robolectric XCTest e XCUITest
Extensão dos aplicativos gerados .apk .ipa ou .app
Design Guideline Material 2.0 HIG – Human Interface Guideline
Navegador nativo Google Chrome Safari Mobile

 

Além do setup de ferramentas, as plataformas possuem guidelines dedicados aos diversos aspectos inerentes ao desenvolvimento nativo: design, arquitetura, testes e publicação nas lojas. Esta parte é um pouco mais extensa e por este motivo deixo como sugestão de estudo os próprios guides:

 

 

2. Setup

Em geral, o setup é simples, porém requer seguir alguns passos importantes, para evitar dor de cabeça. É necessário instalar o Appium e certificar-se que seu ambiente de desenvolvimento esteja configurado. Existem diversos tutoriais disponíveis, inclusive nos sites oficiais. Todavia, deixo abaixo um exemplo de setup simples utilizando Homebrew, Npm e Sdk Manager. Tudo por linha de comando.

 

Geral
brew install node
npm i appium
npm i wd
brew cask install java8 (exemplo para a linguagem Java)
brew install maven (exemplo usando Maven)

 

Android
brew install gradle
brew cask install android-platform-tools
brew cask install android-sdk
brew install android-ndk
brew cask install intel-haxm
sdkmanager “platform-tools” “platforms;android-28”
sdkmanager “build-tools;28.0.1”

 

iOS
brew install carthage
brew tap facebook/fb (opcional)
brew install fbsimctl (opcional)
brew install libimobiledevice (real devices)
npm install -g ios-deploy (real devices)
brew install ios-deploy (real devices)
brew tap wix/brew (simulator utils)
brew install wix/brew/applesimutils (simulator utils)

Para Windows, você pode utilizar ferramentas equivalentes ao Homebrew, como Scoop ou Chocolatey. É possível fazer toda a configuração manualmente também.

 

3. Drivers

O Appium utiliza Drivers (também chamado de Automation Engine) para se comunicar com os dispositivos e com os aplicativos em teste. Cada plataforma possui seus próprios:

Plataforma Drivers
Android Selendroid (descontinuado)
Android UiAutomator1 (descontinuado)
Android UiAutomator2
Android EspressoDriver (beta)
iOS UiAutomation ( < 9.3)
iOS XCUITest (> 9.3)

 

O driver padrão é o Appium, e podemos utilizar outros através de uma configuração chamada automationName. Vamos falar melhor sobre estas “configurações” no tópico a seguir.

4. Capabilities

As capabilities, ou simplesmente caps, são as configurações necessárias para executar os testes. É através delas que você vai dizer ao Appium:

  • Qual o sistema operacional que vou fazer o teste? (platformName)
  • Qual o dispositivo que irei utilizar? (udid)
  • Qual o Driver? (automationName)
  • Qual app que vou testar? (app)
  • Quais permissões (câmera, localização) serão habilitadas? (permissions)

E por aí vai. É interessante entender a estratégia que será adotada nos testes para utilizar as caps adequadas. Vale também investir um tempo estudando e entendendo a função de cada uma. A lista completa de capabilities pode ser vista em: http://appium.io/docs/en/writing-running-appium/caps/#appium-desired-capabilities

 

5. Locators

Os locators ou “opções para mapeamento” são as estratégias e atributos utilizados para encontrar os elementos na tela. Existem os que servem para mais de uma plataforma e os específicos. Além disso, alguns possuem uma performance superior, ou seja, encontram os elementos mais rápido e com menor chance de “quebra” no teste. A propósito a lista abaixo já está em ordem de prioridade em relação a performance dos locators.

Plataforma Locators
Android id
Android Android UiAutomator (UiAutomator2 only)
Android Android View Tag (Espresso only)
iOS iOS Predicate
iOS iOS ClassChain
iOS IOS UIAutomation
Ambos accessibilityId
Ambos name
Ambos className
Ambos xpath
Ambos -custom (usando find plugins)
Ambos Image (base 64)

Grande parte do desenvolvimento dos testes envolve mapear ou dar manutenção aos elementos já mapeados. É importante conhecer e saber quando usar cada uma das estratégias. O “como mapear” vou deixar em aberto, pois não é o foco do post, mas considere que é possível mapear utilizando o próprio Appium Desktop, ou com outras alternativas (UI Automator Viewer, Macacajs, etc.).

 

6. Waits e Expected Conditions

Eis aqui um ponto importante. Lembre-se: esperar o momento certo para encontrar ou interagir com o elemento é tão importante quanto saber mapeá-lo corretamente. Os “Waits” são estratégias para literalmente esperar o momento adequado de procurar ou interagir com os elementos.

Antes de qualquer busca ou interação é interessante conferir se:

  • O app está carregando alguma informação que devo aguardar?
  • O elemento está completamente renderizado?
  • Ele está visível?
  • Consigo interagir com ele (clicar, escrever, capturar texto, etc)?

Para conferir essas condições esperadas utilizamos os Waits.

Podemos utilizar três estratégias: Estática, Explícita ou Implícita.

 

Na Estática, utilizamos o tempo como condição, ou seja, dizemos ao Appium que espere por um certo período antes de interagir. Exemplo: esperar 5 segundos.

Na Explícita, utilizamos as “Expected Conditions” para dizer ao Appium que espere até aquela condição ser verdadeira. Exemplo: esperar até o elemento estar visível.

Na Implícita, dizemos para o driver o tempo máximo para tentar encontrar um elemento, isto é, o Appium segue tentando encontrar o elemento até que o tempo acabe. Exemplo: buscar o elemento na tela por no máximo 10 segundos.

 

7. Actions (interações) & Gestures (gestos mobile)

Interagir com os elementos e com o dispositivo possibilita simular o comportamento de um usuário e, com isso, automatizar os fluxos que queremos. Actions são as interações básicas feitas com um elemento: clicar, escrever, arrastar, etc.

Gestures são os gestos feitos com o device usuário, tais como: pinch (zoom), swipe, scroll, etc. Alguns exemplos são:

Interação ou Gesto Biblioteca responsável
Clique Appium Driver
Escrever texto Appium Driver
Tap Appium Gestures
DoubleTap Appium Gestures
Swipe Appium Gestures
Scroll Appium Gestures
Pinch Appium Gestures
Zoom Appium Gestures
TouchAndHold Appium Gestures
TwoFingerTap Appium Gestures
DragFromToForDuration Appium Gestures
SelectPickerWheelValue Appium Gestures
Alert Appium Gestures

Existem algumas particularidades de nomenclatura e implementação de ações e gestos. É importante conhecer e experimentar diferentes estratégias, além de utilizar as opções mais semelhantes com as utilizadas pelo usuário do aplicativo. Como sugestão, deixo estes dois links que explicam e mostram exemplos de cada gesto:

 

★★★ Bônus ★★★

Nos últimos meses acabei estudando um pouquinho mais sobre Appium e, como o conteúdo é extenso, resolvi organizar isso em um formato simples de explicar e de consolidar o conhecimento adquirido até então.

Além disso, por diversas vezes a solução não estava na documentação oficial, ou nos primeiros resultados da pesquisa no Google. Por isso, para facilitar minha vida, criei uma lista de links úteis, com tema e fonte para diferentes problemas comuns que fui descobrindo como resolver. Como bônus, deixo o caminho  para esse guide contendo a lista de recursos e links úteis: Appium Mobile Automation Guide

Sugestões de melhoria são bem vindas! Por experiência própria, posso garantir que esse guia irá lhe poupar uma grande fatia de tempo.

E então, #partiuAutomaçãoMobile?

Até a próxima! 🙂

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s