2.9 FREVO – Um Framework e uma Ferramenta para Automação de
2.9.1 Descrição do Framework FREVO
2.9.1.2 Classe BaseTestCase
A classe BaseTestCase é considerada a principal classe do framework FREVO. Ela é a classe base a partir de onde todos os casos de teste desenvolvidos no framework FREVO devem estender. Por sua vez, essa classe estende a classe UiAutomatorTestCase do UI Automator, mantendo assim o ambiente padrão de execução de um caso de teste do Android. As principais funções da classeBaseTestCase são destacadas da seguinte forma por Melo [4]:
• Definição do fluxo de execução;
• Padronização na codificação descripts;
• Controle e monitoramento da execução, considerando o timeout de um caso de teste; • Armazenamento de informações/características do caso de teste;
• Gravação dos resultados em um banco de dados; • Captura de screenshots em cada assert efetuado; • Disponibilização de novos asserts.
A execução de um caso de teste noframework FREVO obedece o seguinte diagrama de estados da Figura 2.8.
Figura 2.8 – Diagrama de estados da execução de um caso de teste desenvolvido
no framework FREVO.
Fonte: FREVO - Um Framework e uma Ferramenta para Automação de Testes [4].
Segundo Melo [4], os métodos (init(), setUpTestCase(), main(), tearDownTest-
Case()), destacados na Figura 2.8, representam não só o fluxo de execução que os testes obedecem, mas, através dessa sequência lógica, é possível também estabelecer uma padro- nização no desenvolvimento dos scripts no framework FREVO. Dessa maneira, todas as classes de testes que estendem a classe BaseTestCase precisam obrigatoriamente implemen- tar esses quatro métodos para que seja possível garantir tal uniformidade e manutenção de um padrão nos scripts de teste. No framework FREVO, cada classe corresponde a script de teste (caso de teste).
As conexões da classeBaseTestCase com outras unidades integrantes do framework FREVO, bem como os principais atributos e métodos são exibidos na Figura 2.9.
O diagrama de classes da Figura 2.9 permite visualizar a adição de novos métodos assertivos (asserts) bem como a conexão da classe BaseTestCase com outras classes integrantes do framework FREVO.
• TimeCounter: TimeCounter é a classe responsável por realizar a medição do tempo gasto durante a execução de um caso de teste, bem como por controlar o tempo máximo permitido para sua execução.
Figura 2.9 – Diagrama de classes de BaseTestCase e sua conexão com os demais
integrantes do framework FREVO.
Fonte: FREVO - Um Framework e uma Ferramenta para Automação de Testes [4].
• FrevoTestCase: FrevoTestCase é a classe responsável por estruturar todos os dados da execução, organizando informações relacionadas para cada teste executado (idioma da execução, validações internas, tempo de execução e o resultado final do teste).
O banco de dados do framework FREVO foi elaborado para armazenar todas as informações da execução de um caso de teste, onde as validações internas de um caso de teste (assert) são consideradas como um subteste. Cada subteste contém as informações necessárias para realizar a validação, como a descrição do que está sendo validado, o resultado atual e o esperado para aquela validação, um screenshot da validação e o resultado desse subteste. Dessa forma percebe-se a necessidade de utilização dos
asserts disponíveis pelo framework através da classe BaseTestCase, uma vez que os dados
validados através desses métodos irão ser armazenados no banco de dados doframework. Posteriormente, esse banco de dado será lido pela ferramenta FREVO e será possível visualizar em detalhes todas as validações contidas nos casos de testes executados.
Melo [4] faz uma relação entre os nomes dos métodos padrões disponíveis no
framework UI Automator e os métodos correspondentes no framework FREVO como
observado na Tabela 6.
O Código 2.2 (extraído de Melo [4]) ilustra como se dá uma implementação de um teste no framework FREVO. Note que a classe ExemploFrevoUiAutomator estende a classe BaseTestCase, sendo necessária a implementação dos métodos obrigatórios descritos na Tabela 6.
Código 2.2 – Exemplo de implementação de um script no framework FREVO.
Tabela 6 – Relação entre os métodos padrões nos frameworks UI Automator e
FREVO.
UI Automator FREVO Descrição
setUp() setUpTestCase() Preparação do ambiente para execução do teste.
test() main() Método onde o teste será desenvolvido.
tearDown() tearDownTestCase() Finalização do ambiente de execução do teste.
- init() Método onde as informações específicas do teste serão informadas.
Fonte: Adaptado de FREVO - Um Framework e uma Ferramenta para Automação de Testes [4].
private final String LAUNCH_APP = "Chrome";
private final String PACKAGE_APP = "com.android.chrome";
private UiDevice mDevice;
@Override
public void init() throws Exception {
// Define descricao do teste
mTestCase.setDescription("Abrir a aplicacao Chrome no dispositivo sob
teste");
// Define a versao do sistema para a qual o script eh indicado mTestCase.setBuildId(BuildEnum.M.getId());
// Define um timeout de 30s (30000ms) para o teste. mTestCase.setTimeoutExecutionMillis(30000);
}
@Override
public void setUpTestCase() throws Exception {
mDevice = UiDevice.getInstance();
// Acende a tela do dispositivo e pressiona a tecla HOME mDevice.wakeUp();
mDevice.pressHome(); }
@Override
public void main() throws Exception {
// Recuperar o botao central para abrir a bandeja de aplicativos
UiObject appTrayItem = new UiObject(new
appTrayItem.click();
UiScrollable scrollableList = new UiScrollable(new
UiSelector().scrollable(true));
// Ao abrir a bandeja, faz um scroll pesquisando a aplicacao definda em // LAUNCH_APP
scrollableList.scrollTextIntoView(LAUNCH_APP);
UiObject appItem = new UiObject(new UiSelector().text(LAUNCH_APP));
// Efetua um clique para abrir a aplicacao definida em LAUNCH_APP
if (appItem.exists()) {
appItem.clickAndWaitForNewWindow(); sleep(3000);
mSubTestDescription = "1. Verifique que a aplicacao Chrome foi
executada com sucesso"; mExpectedResult = PACKAGE_APP;
mActualResult = mDevice.getCurrentPackageName();
this.assertValidateEquals(mSubTestDescription, mExpectedResult,
mActualResult); }
}
@Override
public void tearDownTestCase() throws Exception {
// Pressiona a tecla HOME mDevice.pressHome(); }
}
O código acima clica na tecla Home, abre a bandeja de aplicativos, executa o navegador Chrome, verifica se a janela aberta foi de fato o Chrome e finaliza teclando em
Home novamente.