Testar aplicações móveis com Xamarin Test Cloud

Criação automática de testes

O Xamarin Test Record permitirá gravar e executar testes de aceitação para aplicações desenvolvidas usando a plataforma Xamarin, apresentando uma interface minimalista com as opções básicas: gravar, editar, executar e exportar testes (como podemos constatar na figura 14).

Xamarin Test Cloud: aplicação preview do Xamarin Test Record
Figura 14: Aplicação preview do Xamarin Test Record

Antes de iniciar a gravação dos testes, é requisito definir:

  • Qual o dispositivo que pretendemos usar para executar a aplicação
    Xamarin Test Cloud: seleção do dispositivo
    Figura 15: Seleção do dispositivo
  • Qual a aplicação que vamos executar
    Xamarin Test Cloud: seleção da aplicação
    Figura 16: Seleção da aplicação

Após esta seleção a aplicação é executada no dispositivo selecionado e em seguida é possível gravar as diversas funcionalidades da aplicação. Vejamos a figura 17, que nos mostra o Test Record a executar a aplicação TODO.

Xamarin Test Cloud: Xamarin Test Record a executar a aplicação TODO
Figura 17: Xamarin Test Record a executar a aplicação TODO

Como se pode constatar, a aplicação apresenta alguns items já comprados, suponhamos agora que o nosso objetivo é selecionar o item “Buy milk” e defini-lo como “Done”, para que seja considerado como comprado. A operação descrita irá ser gravada pelo Test Record, que por sua vez irá escrever o testes de aceitação para este comportamento. A partir da obtenção deste teste, é possível replicar este comportamento automaticamente e sem que seja necessário recorrer a processos manuais. Sendo assim, iniciemos a gravação, como podemos ver na figura 18.

Xamarin Test Cloud: início da gravação
Figura 18: Início da gravação

Após isto, clicando no item “Buy milk” iremos ver no Test Record o código referente ao “Tap” no “Buy milk”, como se pode ver na figura 19.

Xamarin Test Cloud: resultado da seleção do item “Buy milk”
Figura 19: Resultado da seleção do item “Buy milk”

O resultado final pode ser analisado na figura 20, e é possível concluir que o teste é definido por três operações:

  • Tap sobre o elemento “Buy milk”;
  • Swipe no elemento “Done”;
  • Tap no botão “Save”.
Xamarin Test Cloud: “Buy milk” selecionado como comprado
Figura 20: “Buy milk” selecionado como comprado

Edição manual de testes

À data, não é possível editar manualmente o código gerado no Test Record (que podemos visualizar do lado direito), a sua edição tem que ser feita no menu do lado esquerdo através das opções disponíveis, que permitem editar o controlo selecionado, remover operações realizadas e adicionar screenshots em cada passo. Na figura 21, podemos ver em mais detalhe as várias opções.

Xamarin Test Cloud: edição do teste
Figura 21: Edição do teste

Exportação de testes

No final do teste ser gravado é possível exportá-lo para o clipboard, como ficheiro *.cs ou enviar o teste para o Test Cloud, como podemos ver na figura 22.

Xamarin Test Cloud: exportar teste
Figura 22: Exportar teste

O output, neste caso, será então o seguinte code snippet:

        
        [Test]
        public void NewTest ()
        {
            app.Tap(x => x.Class("Xamarin_Forms_Platform_iOS_Platform_DefaultRenderer").Index(2));
            app.Screenshot("Tapped on view Xamarin_Forms_Platform_iOS_Platform_DefaultRenderer");
            app.SwipeRight();
            app.Screenshot("Swiped right");
            app.Tap(x => x.Marked("Save"));
        }

Nota: Em Xamarin.iOS ou Xamarin.Android normalmente os elementos gráficos são identificados pelo valor dos atributos Text ou do Id. Em Xamarin Forms são identificados pelo atributo StyleId (que tem apenas este propósito), no entanto é preciso:

  • Em iOS, no método FinishedLaunching depois da inicialização do Forms.Init definir a atribuição do StyleId ao atributo AccessibilityIdentifier.
     Forms.ViewInitialized += (object sender, ViewInitializedEventArgs e) =>
     {
       if (null != e.View.StyleId) {
           e.NativeView.AccessibilityIdentifier = e.View.StyleId;
          }
     };
    
  • Em Android, no método OnCreate depois da inicialização do Forms.Init definir a atribuição do StyleId ao atributo ContentDescription.
    Xamarin.Forms.Forms.ViewInitialized += (object sender, Xamarin.Forms.ViewInitializedEventArgs e) =>{
          if (!string.IsNullOrWhiteSpace(e.View.StyleId)) {
            e.NativeView.ContentDescription = e.View.StyleId;
       }
    };
    

Xamarin Test Cloud

O Xamarin Test Cloud, disponível em testcloud.xamarin.com, é um “serviço na nuvem” disponibilizado pela Xamarin que permite testar automaticamente as aplicações móveis com base nos UI Acceptance Testing, em centenas de dispositivos, fornecendo informação sobre a performance e eficiência da aplicação. Claro está, o resultado final da execução dos testes nos diversos dispositivos vai permitir concluir se a aplicação executa corretamente e se esta está apta para ser publicada nas diversas lojas. Os dispositivos disponíveis pelo serviço podem ser consultados na seguinte referência: https://testcloud.xamarin.com/devices.

O custo do serviço é baseado no tempo de execução dos testes nos dispositivos selecionados, sendo excluído o custo de manutenção e provisionamento. Para consultar o preço dos planos disponíveis consultar a referência: https://xamarin.com/test-cloud.

De uma forma geral, o fluxo do processo de execução dos testes no serviço Test Cloud, é definido por (ver figura 23):

  • O programador publica o(s) teste(s) e o(s) pacote(s) da aplicação no Test Cloud
  • Seleciona os dispositivos onde pretende executar a aplicação
  • A aplicação é instalada nos dispositivos e os testes são executados nos dispositivos
  • Para cada dispositivo é recolhido os screenshots e resultados da execução do teste
  • Os resultados são fornecidos ao programador
Xamarin Test Cloud: workflow do processo de testes usando o Test Cloud
Figura 23: Workflow do processo de testes usando o Test Cloud

Anatomia da framework do Test Cloud

O Test Cloud suporta duas framework Calabash e Xamarin.UITest que já referimos anteriormente. Esta bibliotecas requerem o Xamarin Test Cloud Agent que irá fazer com que os testes sejam executados nos dispositivos disponibilizados pelo serviço, e tem como base um modelo cliente-servidor cuja comunicação é feita via JSON através pedidos HTTP.

O modo de funcionamento deste agente nas plataformas suportadas, iOS e Android, é diferente:

  • Em iOS o agente é instalado na própria aplicação, via pacote Nuget
  • Em Android o agente é uma aplicação à parte (daí o requisito das permissões de acesso à internet) que comunica via HTTP
Xamarin Test Cloud: Agent em iOS e Android
Figura 24: Xamarin Test Cloud Agent em iOS e Android

Aplicações que estejam integradas num sistema de integração contínua, podem-se conectar ao Test Cloud para que seja feita a verificação dos testes de aceitação sobre as alterações realizadas. Sendo o fluxo do processo descrito pela figura 25.

Xamarin Test Cloud: workflow usando integração contínua
Figura 25: Workflow usando integração contínua

Publicação para o Xamarin Test Cloud

A publicação da aplicação e respetivos testes no Test Cloud pode ser feita:

  • Usando o Xamarin Studio, na vista Unit Testing, escolhendo a opção Run in Test Cloud
  • Usando o site testcloud.xamarin.com e a linha de comandos
Xamarin Test Cloud: Publicação dos testes via Xamarin Studio e via testcould.xamarin.com
Figura 26: Publicação dos testes via Xamarin Studio e via testcould.xamarin.com
Xamarin Studio

No cenário em que usamos o Xamarin Studio, o pacote da aplicação e os testes são enviados para o Test Cloud:

/Library/Frameworks/Mono.framework/Versions/4.2.2/bin/mono “/Users/saramgsilva/DevApps/XTC/Todo/PCL/packages/Xamarin.UITest.1.1.1/tools/test-cloud.exe” asubmit “/Users/saramgsilva/DevApps/XTC/Todo/PCL/Todo.Android/bin/Debug/Todo.Android.apk” –async –fixture Todo.Test.Tests(Android) –app-name Todo.Android –assembly-dir “/Users/saramgsilva/DevApps/XTC/Todo/PCL/Todo.Test/bin/Debug”

Negotiating file upload to Xamarin Test Cloud.

Posting to https://testcloud.xamarin.com/ci/anonymous_uploads

 

Uploading Xamarin.UITest.dll … Already uploaded.

Uploading nunit.framework.dll … Already uploaded.

Uploading AndroidTestServer.apk … Already uploaded.

Uploading Todo.Android_resigned.apk … Already uploaded.

 

Uploading Todo.Test.dll… 100%

Uploading Todo.Test.dll… 100%

 

Upload complete.

 

Skipping wait for cloud execution. Upload Id: c043fdb4-8bcb-4ff8-29a8-45e7fb32298e 

Sendo de seguida lançado no browser, o testcloud.xamarin.com, que irá permitir:

  • Escolher os dispositivos
    Xamarin Test Cloud: seleção dos dispositivos
    Figura 27: Seleção dos dispositivos
  • Configurar o ambiente de testes
    Xamarin Test Cloud: configurações
    Figura 28: Configurações
  • Executar os testes
    Xamarin Test Cloud: execução dos testes em progresso
    Figura 29: Execução dos testes em progresso
Linha de comandos

No cenário em que usamos a linha de comandos, vamos executar algo do género:

  • Em Mac
    mono packages/Xamarin.UITest.[version]/tools/test-cloud.exe submit yourAppFile.apk 4b84c09bc46e247c35cad0f0dad5ae8e –devices 7492d185 –series “master” –locale “en_US” –app-name “Todo” –user nome@mail.com –assembly-dir pathToTestDllFolder
  • Em Windows
    packages\Xamarin.UITest.[version]\tools\test-cloud.exe submit yourAppFile.apk 4b84c09bc46e247c35cad0f0dad5ae8e –devices d1a15df1 –series “master” –locale “en_US” –app-name “Todo” –user nome@mail.com –assembly-dir pathToTestDllFolder

Resultado dos testes

Como podemos ver no tópico anterior, a execução de testes no Test Cloud é um processo muito simples. No fim da execução de todos os testes, é gerado um relatório como podemos ver nas figuras 30 e 31.

Xamarin Test Cloud: painel com resumo da execução dos testes
Figura 30: Painel com resumo da execução dos testes

De salientar, que neste painel é possível analisar o tempo de execução, o número de dispositivos para o qual os testes passaram com sucesso, a versão da plataforma, o total de memória usado e o tamanho da aplicação. Métricas estas que podem depois ser usadas para análise estatística entre as sucessivas execuções da aplicação.

Xamarin Test Cloud: relatório final por dispositivo
Figura 31: Relatório final por dispositivo

Para terminar, é de referir que o relatório final apresenta as diversas operações que o teste executa, e para cada uma das operações diz se executou com sucesso ou não. Neste caso simples, da aplicação TODO, todos os passos foram efetuados com sucesso sendo possível constatar isso mesmo nos screenshots apresentados na figura 30. No entanto, podemos consultar a demo online, disponibilizada pela Xamarin, na referência https://xamarin.com/test-cloud/demo, que mostra as métricas, screenshots e erros da aplicação Account Verification.

Conclusão

Em conclusão, podemos concluir que a Xamarin está a apostar nas ferramentas, APIs e serviços para melhorar as aplicações móveis, sendo o Xamarin Test Cloud uma solução que nos vai permitir identificar os diversos problemas que muitas vezes é impossível detectar em processos manuais, e claro está a framework Xamarin.UITest em conjunto com o Xamarin Test Record facilita todo o processo automático referente à criação dos testes de aceitação. A diversidade de dispositivos, os filtros disponíveis, o detalhe do resultado dos testes e o ambiente oferecido são sem dúvida as mais valias para quem usa o serviço, que tem apresentado uma evolução constante de acordo com as necessidades do mercado.

Referências