Teste de interface do usuário Android e iOS com Calabash

Publicados: 2022-03-11

O teste é uma parte essencial de qualquer processo de desenvolvimento de aplicativos móveis. Esteja você automatizando esses testes ou não, nenhum desenvolvedor sensato considera seu trabalho concluído, a menos que tenha testado seu aplicativo.

Um aplicativo bem testado geralmente passa por várias etapas de teste: teste de unidade, teste de integração, teste de aceitação e assim por diante. À medida que seu aplicativo cresce, a importância dos testes aumenta e a automação nos testes se torna uma necessidade.

Teste de aceitação do Calabash para Android e iOS

Enquanto outras plataformas, como a web, avançaram significativamente em termos de mecanismos e estruturas de teste, o reino móvel não fica para trás. Neste artigo, você aprenderá como usar o Calabash para automatizar a interface do usuário para seus aplicativos Android e iOS usando instruções simples em inglês e tornar o teste de aceitação o mais simples possível.

O que é o teste de interface do usuário?

Se você está testando seus aplicativos manualmente, provavelmente está desperdiçando grande parte do seu tempo executando as mesmas tarefas repetidamente. Você faz algumas alterações no código, cria o aplicativo, executa-o em um dispositivo ou emulador e mexe no aplicativo para descobrir se ele funciona conforme o esperado.

Ao automatizar o teste de interface do usuário, você pode executar essas mesmas etapas manuais automaticamente. Se o seu aplicativo tiver um tamanho decente, isso pode economizar muito do seu tempo e também evitar que seu aplicativo seja repleto de bugs embaraçosos, especialmente os de regressão.

“Isso parece incrível”, você diz, mas como você faz isso para seu aplicativo Android ou iOS?

Estruturas de teste de interface do usuário para Android e iOS

Se você ler a documentação oficial para Android e iOS, eles sugerem que você escreva e execute testes de interface do usuário em seus IDEs oficiais. Para Android, é o Android Studio e, para iOS, é o Xcode.

A documentação oficial chega a recomendar frameworks específicos para testes. A documentação oficial do Android aborda alguns tópicos sobre o Espresso, a estrutura de teste da interface do usuário do Android. Da mesma forma, a Apple sugere o uso do framework XCTest.

E se você vai trabalhar seriamente em testes de interface do usuário, pode estar seguindo essas sugestões, o que faz sentido, já que o Espresso é mantido pelo Google e faz parte do Android Support Repository. É muito provável que o Espresso suporte todos os novos recursos que o Google apresentará para o Android no futuro. Você poderia dizer o mesmo sobre o framework XCTest para iOS.

No entanto, vale a pena ter em mente que, apesar dos inúmeros benefícios dos testes automatizados, muitos desenvolvedores simplesmente não os escrevem.

Todo desenvolvedor que conhece as automações de teste, no fundo, sabe que é uma ótima ideia. Mas, na hora de sentar e escrever esses testes, muitos desenvolvedores começam a questionar se vale a pena perder tempo, pois “tocar no botão” manualmente acaba sendo uma operação muito mais rápida do que escrever um código que vai “tocar neste botão” automaticamente. Às vezes, clientes e gerentes, esperando ansiosamente para experimentar o aplicativo, também não ajudam.

Muitos desenvolvedores, nesse ponto, decidem que é melhor continuar trabalhando em novos recursos do aplicativo em vez de escrever testes automatizados de UI para os existentes.

Quando o aplicativo cresce, torna-se cada vez mais demorado “tocar nesses botões” manualmente toda vez que você atualiza o aplicativo.

Mas e se houvesse uma estrutura que facilitasse o teste de interface do usuário e não desse nenhuma desculpa para não escrever testes de interface do usuário para seus aplicativos?

Conheça o Calabash.

Calabash: teste de aceitação automatizado para aplicativos móveis

Cerca de um ano atrás, comecei a procurar um framework de teste que fosse fácil de usar para pessoas que não são desenvolvedores de software. E foi aí que encontrei Calabash.

Essa estrutura de teste de código aberto, desenvolvida e mantida pela equipe do Xamarin, funciona para Android e iOS. Ele permite que você escreva e execute testes de aceitação automatizados para aplicativos móveis.

Os testes de aceitação geralmente são o que vem após os testes do sistema que determinam se seu aplicativo atende aos requisitos de negócios. Dado que ele opera no nível da interface do usuário, isso funciona bem como nossa escolha de estrutura de automação de teste de interface do usuário.

Calabash pode interagir com seu aplicativo como Espresso ou XCTest. No entanto, o que torna o Calabash uma excelente escolha aqui é o suporte ao Cucumber.

O Cucumber é uma ferramenta que pode executar testes automatizados escritos em inglês simples (se você quiser, pode ajustá-lo para usar qualquer outro idioma simples). Portanto, para escrever testes automatizados no Cucumber, o testador não precisa conhecer Java, Objective-C ou qualquer outra linguagem de programação.

O que faz o Calabash Tick?

A estrutura do Calabash consiste em bibliotecas que podem interagir com os aplicativos Android e iOS. Pode ser executado em dispositivos reais. Assim, ele pode fazer coisas que o testador está fazendo manualmente.

Existem dois projetos diferentes no GitHub que tornam o Calabash possível:

  • calabash-android - para Android

  • calabash-ios - para iOS

Calabash pode funcionar com qualquer framework de teste baseado em Ruby. Neste artigo, abordaremos o Cucumber - a maneira mais popular e conveniente de escrever testes para o Calabash.

Antes de continuar, se você quiser experimentar o Calabash seguindo o restante do artigo, certifique-se de ter o Ruby instalado em sua máquina. Você pode encontrar instruções detalhadas de instalação aqui.

Em seguida, instale o Calabash para sua plataforma favorita seguindo os links do GitHub acima.

Escrevendo seu primeiro teste no Calabash

Escrever testes no Calabash é bem fácil. Vamos ver como é um teste simples para um aplicativo iOS:

 Feature: User Login Scenario: Unsuccessful user login Given the app has launched Then I wait for the "Login" button to appear When I enter "tstuser" into the "Username" field And I enter "qwerty" into the "Password" field And I touch "Login" Then I should see "Username you entered is incorrect" Scenario: Successful user login Given the app has launched Then I wait for the "Login" button to appear When I enter "testeruser" into the "Username" field And I enter "qwerty" into the "Password" field And I touch "Login" Then I should see "Hey testeruser!"

Aqui, um aplicativo está sendo testado com nome de usuário e senha incorretos e, em seguida, está sendo testado com nome de usuário e senha corretos. O teste espera que o aplicativo falhe no login para o primeiro cenário, mas seja bem-sucedido no segundo.

Você pode criar quantos cenários precisar, e tudo o que você precisa fazer é dividir as etapas/instruções em frases simples em inglês. Assim como você escreveria uma história!

Qualquer um que conheça o desenvolvimento orientado por comportamento (BDD) já se encontrará familiarizado com isso.

Como o Calabash funciona?

Para ver o que acontece por trás das etapas que o testador está usando, você pode abrir o projeto no GitHub e verificar o seguinte arquivo:

 calabash-cucumber/features/step_definitions/calabash_steps.rb

Vamos ver uma definição do seguinte passo:

 When I enter "testeruser" into the "Username" field
 Then /^I enter "([^\"]*)" into the "([^\"]*)" field$/ do |text_to_type, field_name| touch("textField marked: '#{field_name}'") wait_for_keyboard keyboard_enter_text text_to_type sleep(STEP_PAUSE) end

Este pequeno trecho de código Ruby procura um campo específico, toca nele, espera o teclado aparecer, digita o texto da variável text_to_type e espera um pouco antes de passar para a próxima etapa.

A primeira palavra da etapa pode ser "Dado", "Quando", "Então", "E" ou "Mas". Não importa qual palavra-chave você usará. Você pode usar qualquer um deles para tornar a história mais clara.

Como adicionar etapas personalizadas

Se você precisar de uma etapa que ainda não foi implementada no Calabash, poderá escrevê-la por conta própria. A sintaxe é exatamente a mesma das etapas já predefinidas.

Por exemplo, se um testador precisar acessar o campo de entrada por espaço reservado, em vez do nome do campo:

 Then /^I enter "([^\"]*)" into the field with placeholder "([^\"]*)"$/ do |text_to_type, placeholder| touch("textField placeholder:'#{placeholder}'") wait_for_keyboard() keyboard_enter_text text_to_type sleep(STEP_PAUSE) end

Essa definição de etapa é muito parecida com a anterior, mas você está acessando o campo pelo espaço reservado em vez do nome do campo. Dada a aparência do seu aplicativo, isso pode tornar as coisas ainda mais fáceis para o testador.

E é fácil para o desenvolvedor também. O desenvolvedor está implementando a etapa uma vez e, em seguida, o testador a usa sempre que precisar. Além disso, você não precisa saber muito de Ruby para implementar seus próprios passos personalizados.

Você pode encontrar as funções Ruby que você pode usar, aqui:

http://www.rubydoc.info/gems/calabash-cucumber/Calabash/Cucumber

Nuvem de teste Xamarin

Há mais um desafio ao testar aplicativos móveis. Você deve testá-los no maior número possível de dispositivos, porque existem muitos dispositivos e muitas versões do sistema operacional.

É aqui que o Xamarin Test Cloud ajuda muito. Existem cerca de 2.000 dispositivos reais na nuvem e a boa notícia é que ele suporta os testes do Calabash.

Os mesmos testes do Calabash que ajudaram você a economizar tempo evitando que você fizesse trabalho repetitivo agora podem ser usados ​​para testar seu aplicativo em muitos dispositivos reais.

Comece a escrever testes de interface do usuário

Seja o Calabash a solução de teste que seu aplicativo precisa, com as vantagens que ele traz, ele não deixa espaço para desculpas quando se trata de escrever testes automatizados de interface do usuário para seus aplicativos móveis. O Calabash pode ficar aquém se seu aplicativo depender muito de determinados recursos do dispositivo (por exemplo, a câmera), mas ainda torna a escrita de testes para a maioria dos aplicativos uma tarefa muito mais fácil.