O processo de criar e desenvolver uma aplicação não passa apenas pela programação propriamente dita. Tudo começa pela análise de requisitos, planeamento, programação e por fim o teste ao que foi implementado para garantir que tudo funciona como o previsto.
Todos os programadores fazem testes (“debug”) às suas aplicações em busca de erros execução ou situações inesperadas que possam ocorrer no decorrer da execução da aplicação desenvolvida. É neste processo que a ferramenta Android Monkey Test é extremamente interessante para quem desenvolve para a plataforma móvel Android.
O Android Monkey Test é uma ferramenta incorporada no SDK Android que tem como objetivo fazer testes aleatórios e sequenciais a uma aplicação, coisas como a acção de touch, introdução de texto, etc… Basicamente, e como o nome da ferramenta indica, é como se a nossa aplicação estivesse a ser usada por um macaco ou então por um utilizador que não tem a mínima noção do que está a fazer.
Algumas pessoas perguntar-se-ão o porque de esta ferramenta ser útil. É útil no sentido em que permite encontrar alguns tipos específicos de bugs, tais como bugs relacionados com a sequência do touch, ou seja, o clique num botão antes de algum componente ser inicializado provocando um crash. Estes tipos de erro são muito difíceis de ser testados por humanos mas como existe uma grande diversidade de equipamentos podem ser notados em equipamentos mais lentos ou com conexões mais lentas.
Criar um Projecto Exemplo Android
Para o desenvolvimento deste exemplo utilizei o Android Studio como ambiente de desenvolvimento.
O exemplo usado para demonstrar a utilização do Android Monkey Test é muito simples e tem o seguinte código fonte:
MainActivity.java
package com.androidmonkeytest.nuno.androidmonkeytest; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.widget.Button; public class MainActivity extends ActionBarActivity { Button b1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //button ir para activity2 b1 = (Button)findViewById(R.id.button); b1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Iniciar nova Activity Intent in = new Intent(MainActivity.this, second.class); startActivity(in); } }); } }
SecondActivity.java
package com.androidmonkeytest.nuno.androidmonkeytest; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class second extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); Button b2=(Button)findViewById(R.id.button2); b2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(second.this, "Obrigado por Ter Lido a Revista Programar =)",Toast.LENGTH_SHORT).show(); } }); } }
main_activity.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Portugal@Programar" android:id="@+id/textView" android:textSize="25sp" android:layout_centerHorizontal="true" android:layout_marginTop="10dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Android Monkey Test" android:id="@+id/textView2" android:layout_below="@+id/textView" android:textColor="#ff000000" android:textIsSelectable="false" android:textSize="30dp" android:layout_marginTop="50dp" android:layout_alignLeft="@+id/imageView" android:layout_alignStart="@+id/imageView" android:layout_alignRight="@+id/imageView" android:layout_alignEnd="@+id/imageView" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView" android:src="@drawable/pap_2011" android:layout_below="@+id/textView2" android:layout_centerHorizontal="true" android:layout_marginTop="50dp" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Ir Para Activity 2" android:onClick="button" android:id="@+id/button" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="63dp" /> </RelativeLayout>
SecondActivity.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Portugal@Programar " android:id="@+id/button2" android:layout_below="@+id/imageView" android:layout_centerHorizontal="true" android:layout_marginTop="84dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Android Monkey Test" android:id="@+id/textView3" android:textColor="#ff000000" android:textSize="30dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="52dp" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView" android:src="@drawable/pap_2011" android:layout_marginTop="58dp" android:layout_below="@+id/textView3" android:layout_centerHorizontal="true" /> </RelativeLayout>
Como Executar o Android Monkey Test
Após a implementação do projeto teremos de executar o projeto onde a aplicação ficará funcional no AVD. Só posteriormente poderemos executar o Android Monkey Test uma vez que este este irá basear a sua implementação na app a correr no AVD.
1º Passo:
Abrir a consola e navegar até à pasta android\sdk\platform-tools
2º Passo:
Executar o seguinte comando:
adb shell monkey -p package.nome –-throttle 50 -v 500
No package.nome
colocaremos o package referente ao nosso projecto.
Legenda:
adb
– Android Debug Bridge é uma ferramenta que permite conectar e enviar comandos para um dispositivo Android, neste caso o AVD (emulador).shell
– Shell é uma interface que traduz os nossos comandos em comandos para o sistema.monkey
– É a ferramenta de teste.throttle
– Tempo de espera entre cada evento lançado para a aplicação (milissegundos).v
– É referente ao método verbose que não é mais do que quantificar o “nível” permitindo obter mais detalhe sobre o teste.500
– É o número de eventos que serão enviados para o dispositivo, este valor pode ser alterado pelo utilizador.
Após executarmos o comando a ferramenta de teste irá então “bombardear” a aplicação que está a correr no emulador ou dispositivo com eventos aleatórios.
Desta forma poderemos detectar alguns erros ou situações que poderão fazer a aplicação falhar, permitindo resolver a situação e assim tornar a aplicação mais robusta.
Vantagens e Desvantagens
A grande vantagem da ferramenta Android Monkey Test é a facilidade de uso, uma vez que não é necessário efectuar alterações no código-fonte da aplicação ou instalar ferramentas externas. É apenas necessário a execução de um comando na consola para que a ferramenta seja executada no AVD (emulador) ou num dispositivo físico conectado.
Mas nem tudo são vantagens para a ferramenta Android Monkey Test pois por vezes são gerados uma quantidade assinalável de crashes inválidos. Estes crashes acontecem devido à frequência dos eventos despoletados ser tão elevada que nunca conseguiria ser reproduzida por um humano.
Para evitar estes “falsos” crashes é aconselhado usar o parâmetro --throttle
que permite regular o intervalo de tempo entre eventos despoletados pela ferramenta.
Conclusão
O Android Monkey Test não é a única ferramenta existente que permite efectuar testes automáticos a aplicações, no entanto a sua maior vantagem é a facilidade de uso, simplicidade e utilidade.
Esta simplicidade e facilidade de uso terão sempre importância na escolha da ferramenta de teste Android Monkey Test pois será sempre uma forma simples e rápida de efetuar testes automáticos a uma aplicação Android.