Desenvolvendo para Android – Criando testes automáticos

robotium2Qual o próximo passo depois de criado um aplicativo Android? Testar seu aplicativo!!

Durante o desenvolvimento é natural irmos validando o que estamos desenvolvendo, se o aplicativo está se comportando conforme foi definido. Porém, para evitar testes de regressão do aplicativo todo, em decorrência de determinadas alterações, o ideal é ter um conjunto básico de testes automáticos que garantem a qualidade da aplicação.

Através de testes automáticos é possível perceber se um erro foi introduzido no aplicativo, pois o teste deve falhar.

Para Android existem algumas APIs especificas para fazer testes automáticos. Vou adotar no exemplo deste post a biblioteca Robotium. A ideia é criar um aplicativo bem simples e mostrar como criar um projeto de teste automático para a aplicação criada.

Primeiro passo crie um projeto Android, contendo basicamente duas telas, uma de login com os campos usuário e senha e uma segunda tela que exibirá uma mensagem depois de feito o login, conforme imagens abaixo.


integração

Figura 1 – Estrutura do projeto e as duas telas que compõem o aplicativo 

A próxima etapa é criar um projeto “Android Test Project” para automatizar os testes do projeto criado anteriormente. Para criar o projeto clique em “File → New → Other → Android → Android Test Projetc”.

projeto

Figura 2 – Criação do projeto de teste Android

Defina um nome para o projeto de testes.

projeto1

Figura 3 – Definindo o nome do projeto

Clique em “Next”, será pedido para selecionar o projeto que deseja automatizar, ou seja, que será feito o teste. Para isso, selecione a opção “An existing Android Project ” e selecione o projeto de login que foi mencionado no inicio deste post.

projeto2

            Figura 4 – Selecione o projeto que será feita a automação   

Clique em “Next” e selecione a versão do Android correspondente com o a versão do projeto de login. Clique em “Finish”. 

projeto3

Figura 5 – Versão do projeto de teste

Pronto! A estrutura do projeto de teste já está feita. O próximo passo é criar os testes automáticos.

Crie a classe “LoginActivityTest” que será a responsável por rodar os testes.

 

public class LoginActivityTest extends
ActivityInstrumentationTestCase2<LoginActivity> {

// Criada variavel solo que é responsavel por acessar a activity
private Solo solo;

@SuppressWarnings("deprecation")
public LoginActivityTest() {

// Definindo a activity que iremos testar
super("br.robotium", LoginActivity.class);
}

@Override
protected void setUp() throws Exception {
super.setUp();
solo = new Solo(getInstrumentation(), getActivity());
}

public void testLogin() {

// Irá verificar se existe o texto "Usuário" na tela
assertTrue(solo.searchText("Usuário"));

// Irá verificar se existe o texto "Senha" na tela
assertTrue(solo.searchText("Senha"));
}

public void testUsuarioESenhaIncorretos() {

// Cria os dois campos de texto utilizando os ids do lyaout da tela
EditText edtUsuario = (EditText) solo.getView(R.id.txtUsuario);
EditText edtSenha = (EditText) solo.getView(R.id.txtSenha);

// Informa o valor "teste" no campo "Usuário"
solo.enterText(edtUsuario, "teste");

// Informa o valor "teste" no campo "Senha"
solo.enterText(edtSenha, "teste");

// Comando que faz com o botão "Logar" seja clicado
solo.clickOnButton("Logar");
assertTrue(solo.searchText("Usuário ou senha inválidos!!"));
}

public void testUsuarioESenhaCorretos() {

EditText edtUsuario = (EditText) solo.getView(R.id.txtUsuario);
EditText edtSenha = (EditText) solo.getView(R.id.txtSenha);

solo.enterText(edtUsuario, "admin");
solo.enterText(edtSenha, "admin");

solo.clickOnButton("Logar");
assertTrue(solo.searchText("Login realizado com sucesso!!"));

//Valida se após fazer o login entrou na outra janela que contém o texto "Usuário"
assertTrue(solo.searchText("Entrou na primeira tela do aplicativo"));

//Simula o click do botão voltar do Android
solo.goBack();
}

}
Listagem 1 – Classe LoginActivityTest que contém os testes

A classe estende ActivityInstrumentationTestCase2<LoginActivity> que recebe como parâmetro a activity que corresponde a activity principal do projeto de Login.

No primeiro trecho do código vemos uma variável da classe Solo. Essa variável será responsável por acessar a activity do outro projeto. Ela que é responsável por interagir com a aplicação.

No método construtor LoginActivityTest é definido qual será a activity a ser testada, que no caso é a LoginActivity.

No método “setUp” é instanciado a classe Solo.

Os outros métodos são responsáveis pela execução dos testes automáticos em si. Por exemplo, o método “testLogin” basicamente verifica se existe o texto “Usuário” na tela de login através do método “searchText” da classe Solo, que retorna um true ou false conforme resultado obtido.

No método “testUsuarioESenhaIncorretos” é feito a automação do teste de usuário e senha inválidos. Para isso é instanciado os campos de usuário e senha. Depois usando o método “enterText” da classe Solo é informado os valores para cada campo, ou seja, é como se uma pessoa estivesse digitando esses valores na tela do aparelho.

O próximo trecho de código é simulando o clique do botão “Logar” realizado através do método “clickOnButton” da classe Solo. E por fim, é verificado se a mensagem retornada da ação de clicar no botão é a mensagem informando que o usuário ou a senha são inválidos, se o resultado for verdadeiro o teste passa, ou seja, significa que a parte de verificação do login continua funcionando corretamente.

O método “testUsuarioESenhaCorretos” faz basicamente a mesma coisa, porém informando um usuário e senha corretos e validando se ao clicar no botão “Logar” o sistema exibe a tela de mensagem, através do método “searchText” da classe Solo, que verifica se a frase “Entrou na primeira tela do aplicativo” existe, pois esse é o comportamento esperado.

Pronto!! Agora já temos métodos que são responsáveis por validar alguns comportamentos da aplicação, garantindo que se algo for alterado ou um erro for inserido na aplicação o teste falhará, indicando que a aplicação precisa ser corrigida.

O próximo passo é executar essa classe de testes. Para isso clique com o botão direito em cima do projeto “LoginTest” e selecione a opção “Run as → Android Junit Test”.

executar

Figura 6 – Execução da classe de testes

Será aberta uma janela onde deverá ser selecionado um dispositivo para executar o teste. Escolha um e clique em “Ok”.

emulador

Figuara 7 – Escolhendo um dispositivo para executar o teste

Os métodos de teste que foram criados serão executados,  simulando a integração do usuário com o aplicativo, ou seja, o aplicativo será carregado e é como se uma pessoa estivesse “mexendo” nele, assim retornando resultados que são esperados. A imagem abaixo ilustra o resultado da execução dos testes, que no caso foi realizado com sucesso.

execução

Figura 8 – Resultado da execução dos testes

Os exemplos utilizados no post são bem simples, a ideia foi explicar um pouco da importância do teste automático e mostrar como é fácil automatizar testes para aplicações Android. Agora o ideal é para cada aplicação mapear as principais funcionalidades e tentar automatizá-las para garantir uma melhor qualidade.

Os dois projetos utilizados no exemplo, estão disponíveis aqui.

Esse é o último post da sequência “Desenvolvendo para Android”. Abaixo a lista dos outros posts da série.

1 – Desenvolvendo para Android:  Conheça as versões

2 – Desenvolvendo para Android:  Monte o ambiente

3 – Desenvolvendo para Android: Montando um aplicativo simples

4 – Desenvolvendo para Android: Conhecendo mais componentes

Referências

http://www.vogella.com/tutorials/Robotium/article.html

http://carloscavalcanti.com/2012/01/14/android-aumentando-a-qualidade-com-teste-funcional-utilizando-robotium/

Por MONISE COSTA

Formada em Sistemas de Informação pela PUC Campinas, MATERANA desde 2011. Apaixonada pela área de TI, Analista de Requisitos na maior parte do tempo e desenvolvedora Java/Android por lazer.

Postado em: 27 de março de 2014

Confira outros artigos do nosso blog

[Webinar] Profile de aplicações Java com Oracle Mission Control e Flight Recorder

24 de julho de 2017

Danival Calegari

Criando Mocks de serviços REST com SoapUI

27 de junho de 2017

Monise Costa

Three laws that enable agile software development

09 de março de 2017

Celso Gonçalves Junior

Medindo performance de uma API REST

21 de fevereiro de 2017

Monise Costa

Deixe seu comentário