Testes automatizados mobile com Maestro.dev

Testes automatizados mobile com Maestro.dev

Como parte de uma iniciativa de aprendizado coletivo e fortalecimento técnico, os membros do nosso chapter de QA da ZRP se reuniram para desenvolver algumas Provas de Conceito (POC) com foco em automação de testes mobile. Chapters, no nosso contexto, são comunidades internas formadas por profissionais da mesma disciplina – neste caso, Qualidade de Software – que se reúnem periodicamente para trocar experiências, compartilhar conhecimentos, discutir boas práticas e impulsionar a evolução técnica do grupo e da organização como um todo. A ideia dessa POC foi simples e ao mesmo tempo desafiadora: cada dupla do grupo ficou responsável por explorar uma ferramenta de automação mobile diferente. O objetivo era entender na prática como cada ferramenta funciona, o que entrega bem, o que pode ser um ponto de atenção e como ela se encaixa na nossa realidade de testes. No final de tudo, cada um vai contar um pouco de como foi essa experiência. 

Hoje começaremos por mim, que fiquei responsável por avaliar a utilização do Maestro (maestro.dev), uma ferramenta que se destaca por ser leve, fácil de configurar e com uma linguagem de escrita bem simples e intuitiva. É uma tecnologia menos conhecida e por isso também importante de ser avaliada. 

A ferramenta foi desenvolvida com o objetivo de aprimorar pontos dos seus predecessores, como Appium e Espresso. Sua proposta é oferecer uma maneira mais simples, eficiente e ágil de criar testes automatizados de interface.

Antes de mais nada, preciso deixar aqui algumas informações importantes:

  • No momento, o Maestro não oferece suporte a dispositivos iOS físicos, apenas emuladores.
  • O foco principal dessa POC é rodar em ambiente Android e todo passo a passo anexado aqui foi utilizado no Windows, mas deixarei documentações apartadas para outros sistemas operacionais também.
  • Além de trazer o viés técnico, também abordo aqui o meu ponto de vista próprio, então sem polêmicas.

Sem mais delongas vamos colocar a mão na massa!

Sobre o aplicativo

O aplicativo que escolhi utilizar para testar foi o Skoob, uma rede social para quem ama ler, onde você pode catalogar todos os seus livros, criar metas de leituras, escrever históricos e resenhas, avaliar os livros, etc. E eu quis trabalhar em cima desse aplicativo justamente por já usar no meu dia-a-dia. Inclusive já fica a dica para quem quiser ter um planejamento de leitura (Skoob me patrocina!).

Como criar um histórico de leitura no Skoob - Canaltech

Sobre as instalações iniciais

  1. Instalação do Maestro

Todo passo a passo é indicado na própria documentação deles. Seja para Linux, Mac ou Windows. Atualmente eu uso o Windows, então vou utilizar ele como base para nossa POC. 

  • Baixe a versão mais recente do Maestro, link aqui.
  • Extraia o arquivo zip que você baixou na etapa anterior.
  • Atualize sua variável de ambiente PATH para incluir a pasta maestro\bin. 

Observação: É necessário ter o Java(Jre) instalado.

Tem quem opte por utilizar o WSL2((Windows Subsystem for Linux), já que muitas dependências e comportamentos funcionam mais suavemente no Linux, porém sendo sincera, achei que é configuração demais para um projeto pequeno, então optei pelo mais fácil. Mas deixo aqui um guia com o passo a passo para instalação e configuração do WSL2 para utilizar com o Maestro, diante mão, não tive nenhum problema para rodar o projeto sem ele.

  1. Instalação e configuração do Android Studio
  • Baixe a versão mais recente do Android Studio, link aqui.
  • Aceite os termos e prossiga com a instalação.

Uma vez instalado, o assistente de configuração irá baixar os componentes necessários e você poderá criar um novo projeto. Acessando a aba de Device Manager, você poderá criar o emulador do Android, para esse exemplo estou usando um Medium Phone com Android 16.0, mas você pode usar uma versão mais simples.

O Maestro também disponibiliza alguns comandos para criar um emulador base, no Android padrão (Pixel 6, Google API 30) e no iOS padrão (iPhone 11, iOS 15.5).

maestro start-device --platform android
maestro start-device --platform ios

Você também pode optar por utilizar um device físico configurando no próprio Android Studio.

  1. Instalação do apk no emulador

Uma vez com o emulador configurado e rodando, você pode realizar a instalação do apk de duas formas. A primeira é simplesmente baixando o aplicativo no próprio dispositivo por linha de comando (ou até mesmo acessando a loja de aplicativos do emulador utilizado).

adb install caminho/para/seu_app.apk

E a segunda é configurando no próprio maestro a instalação do apk.

A chave app já cuida da instalação automática do apk no dispositivo conectado (emulador ou físico).

Sobre o teste

Tudo configurado e rodando lindamente, vamos para o que interessa. Para o aplicativo escolhido eu separei os seguintes casos de teste para validar.

Funcionalidade: Login

Cenário 01
Dado que eu esteja na tela de login

Quando clicar no botão de entrar

E não tiver inputado nenhum dado

Então devem aparecer os alertas de campos obrigatórios.

Funcionalidade: Login

Cenário 02
Dado que eu esteja na tela de login

E inputar credenciais válidas

Quando clicar no botão de entrar

Então devo ser redirecionado para o feed.

O Maestro não exige uma linguagem de programação tradicional como JavaScript, Java, ou Python. Em vez disso, ele usa uma linguagem declarativa baseada em YAML para definir os fluxos de teste. Além disso, os seus comandos foram definidos pela própria equipe do Maestro como uma DSL (Domain Specific Language) — uma linguagem específica para o domínio de automação de testes mobile. Vou deixar listado abaixo alguns comandos do Maestro para demonstrar como ele é facinho de entender.

Toques e interações

Comando

O que faz

tapOn: "Texto"

Clica em um elemento que tenha o texto visível "Texto"

tapOn: { id: "botao_ok" }

Toca em um elemento com ID específico (resource-id, no Android)

inputText: "seutexto"

Digita o texto no campo de texto atualmente em foco

eraseText

Apaga o texto no campo de texto em foco

Verificações e asserções

Comando

O que faz

assertVisible: "Texto"

Verifica se o texto "Texto" está visível na tela

assertNotVisible: "Texto"

Verifica se não há texto visível

assertVisible: { id: "elemento" }

Verifica se um elemento com ID está visível

Esperas e delays

Comando

O que faz

waitForText: "Texto"

Aguarda até que o texto apareça

waitForTimeout: 1000

Aguarda 1 segundo (em milissegundos)

Enfim, esses são só alguns exemplos dos comandos que podem ser mais utilizados no dia-a-dia, mas você pode conferir a lista completa aqui. Então, tomando como base esses comandos principais, vamos montar nosso primeiro cenário.

Duas observações importantes aqui:

O comando appId indica o ID do pacote do app já instalado no dispositivo, sem reinstalar. Se o aplicativo já estiver instalado no emulador, você pode rodar o seguinte comando:

adb shell pm list packages

Ele basicamente vai listar os pacotes que você tem instalado trazendo esse identificador do aplicativo. E o comando launchApp inicia o aplicativo no emulador/dispositivo; ele simula a abertura do apk.

Para o segundo cenário, podemos implementar no mesmo arquivo do cenário 1, o seguinte bloco de código:

Execução dos testes

Vamos ver funcionando então? Para rodar o arquivo de teste utilize o seguinte comando:

maestro test app.yaml

Troque o app.yaml para o nome do seu arquivo e voilà.

0:00
/0:46

Lindinho demais né? Simples e prático como tem que ser.

Geração de reports

Você também pode gerar um relatório após os testes com o seguinte comando:

maestro test --format html app.yaml

Ele suporta os formatos html e junit, mas tenho que comentar, é um relatório MUITO simples, não tem muita informação sobre os testes executados e para ser sincera, não acho que esse tipo de relatório trás algum benefício. Procurei algum plugin que pudesse gerar uma documentação mais detalhada e também não encontrei nada que pudesse trazer praticidade. Nada como o que o mochawesome faz no Cypress, por exemplo. Então, ponto negativo para o Maestro.

Outras funcionalidades

Para quem quiser brincar com a ferramenta ou ver rodando, o Maestro tem um playground com uma aplicação de teste, link aqui.

Você também pode configurar um CI no Maestro, e como seus fluxos são executados na nuvem, não há necessidade de configurar simuladores ou emuladores. Não cheguei a brincar com essa funcionalidade em específica, posso deixar para um próximo momento, mas deixo aqui o link da documentação caso alguém se interesse.

Outra coisa interessante, no Maestro você pode escolher uma ordem para a execução dos seus testes e sinalizar se ele deve prosseguir com a execução dos fluxos subsequentes definidos caso um anterior falhe. Para isso você pode adicionar a seguinte configuração ao seu config.yaml:

Isso também serve para reutilizar um arquivo de teste que precisa rodar mais de uma vez. Por exemplo, preciso executar um teste que valida uma listagem antes e depois de ser adicionado mais um item a ela. Só preciso criar um flow para validar essa listagem e chamar na ordem que eu definir.

E por último, para os amantes de inteligência artificial, o Maestro lançou uma nova funcionalidade que utiliza IA para analisar seus testes de ponta a ponta e fornecer insights com base em seus logs durante as execuções de teste. Basicamente, a IA identifica possíveis problemas em artefatos de teste ajudando a melhorar a qualidade do aplicativo. É uma release ainda em fase beta mas que, na minha opinião, tem futuro.

Considerações finais

Fazendo um overview pela minha experiência com o Maestro eu particularmente gostei muito, é fácil de usar e prático, mas eu aplicaria a projetos menores e menos robustos. Hoje muitas ferramentas oferecem mais suporte e uma cartela de plugins para integração, o que não vi tanto no Maestro. Se fosse para dar uma nota, o Maestro seria 8/10. Porém, a ferramenta ainda é muito nova e tem plena capacidade de evoluir.

Referências bibliográficas

Documentação oficial do Maestro

Como configurar o Maestro no Windows

Instalação e configuração do Android Studio