Framework de testes cecom

27
Framework de Testes Centro de Computação da UFMG Julho de 2014

Transcript of Framework de testes cecom

Page 1: Framework de testes cecom

Framework de Testes

Centro de Computação da UFMGJulho de 2014

Page 2: Framework de testes cecom

1. Contextualização● Por que automatizar?● Cucumber● Glue code

● Estrutura dos testes (Cucumber, Java e Selenium)

1. Características atuais do framework● Estrutura organizada● Facilidade na adaptação a novos padrões de sistema● Facilidade na adição de novos passos● Instalação e Configuração simplificadas● Manutenção simples de código, sem XPath

● Relatório para visualização do resultado de testes executados

1. Melhorias em desenvolvimento● Facilidade na digitação de features (utilização de plugin no RAD) ● Integração contínua (Jenkins)

Roteiro desta apresentação

Page 3: Framework de testes cecom

● Testes manuais são uma tarefa repetitiva, propensa a erros;● Testes automatizados possibilitam a redução do tempo gasto na fase de

testes;● Automatização do caminhamento simples pelas telas (clique em todas as

opções do menu) em geral descobre cerca de 30% dos bugs;● Esforços podem ser concentrados em outras atividades ou outros tipos de

teste (que não possam ser automatizados), aumentando a qualidade do produto ;

● A automatização facilita a execução de Testes de Regressão;● Em processos de metodologia ágil, com ciclos de desenvolvimento de

curta duração, pode se tornar impraticável executar testes de sistema abrangentes em cada ciclo, sem o uso de testes automatizados.

Por que automatizar?

Page 4: Framework de testes cecom

● Ferramenta para execução de testes de automatizados (features);

● Executa código a partir de frases escritas em uma linguagem

próxima à natural (Gherkin, com tradução para vários idiomas);

● Fácil entendimento dos cenários de testes

● possibilidade de que cenários sejam escritos pelo próprio dono do

produto;

● Simplicidade na reprodução manual de um cenário de teste;

● Automatização dos cenários de testes pode ser feita

posteriormente;

● Facilidade no rastreamento de erros na execução dos testes

automatizados;

Cucumber

Page 5: Framework de testes cecom

Funcionalidade: Teste do CRUD Gerir Cargo do Quem é Quem

Contexto: Cadastrar, Alterar, Buscar e ExcluirDado que o usuario vini esteja logado na página Home do Quem é Quem Quando o usuário focar o menu CadastroE for acionado o submenu Gerir Cargos do Quem é Quem

Cenário: Inserir Cargos - Verifica Existência PréviaQuando o campo [Buscar] for preenchido com o valor ‘Programador${datahora atual}’E o comando [Buscar] do tipo [Botão] for acionadoEntão nenhum item deve estar retornado na pesquisaQuando o comando [Criar Cargo] do tipo [Botão] for acionadoE o campo [Nome] for preenchido com o valor ‘Programador${datahora atual}’E o comando [Salvar] for acionadoEntão deve ser exibida a mensagem ‘Os dados foram salvos com sucesso.’

.feature

Page 6: Framework de testes cecom

● Glue code é o código fonte que possui as informações interpretadas e tratadas pelo cucumber, que transforma os passos Gherkin em código executável.

● Em Java, o glue code é realizado através de anotações, com as 3 palavras-chave básicas do Gherking: @Dado, @Quando e @Então.

● As anotações recebem como parâmetro uma expressão regular, e o Cucumber faz o casamento do passo Gherkin com as expressões regulares encontradas no glue code.

● Os grupos de captura da expressão regular são passados como parâmetros do método, na ordem em que são encontrados na expressão.

Glue Code

Page 7: Framework de testes cecom

Estrutura dos testes

@Dado …@Entao

public void { ...}

Page 8: Framework de testes cecom

@Quando ("^o usuário focar o menu (.+)$")public void focarMenuCucumber(String menu) throws Throwable { paginaBase.paginaGerais.focaMenu(driver, menu);}

Feature e Glue codeFuncionalidade: Teste do CRUD Gerir Cargo do Quem é Quem

Contexto: Cadastrar, Alterar, Buscar e ExcluirDado que o usuario vini esteja logado na página Home do Quem é Quem Quando o usuário focar o menu CadastroE for acionado o submenu Gerir Cargos do Quem é Quem

Cenário: Inserir Cargos - Verifica Existência PréviaQuando o campo [Buscar] for preenchido com o valor ‘Programador${datahora atual}’E o comando [Buscar] do tipo [Botão] for acionadoEntão nenhum item deve estar retornado na pesquisaQuando o comando [Criar Cargo] do tipo [Botão] for acionadoE o campo [Nome] for preenchido com o valor ‘Programador${datahora atual}’E o comando [Salvar] for acionadoEntão deve ser exibida a mensagem ‘Os dados foram salvos com sucesso.’

Page 9: Framework de testes cecom

Funcionalidade: Teste do CRUD Gerir Cargo do Quem é Quem

Contexto: Cadastrar, Alterar, Buscar e ExcluirDado que o usuario vini esteja logado na página Home do Quem é Quem Quando o usuário focar o menu CadastroE for acionado o submenu Gerir Cargos do Quem é Quem

Cenário: Inserir Cargos - Verifica Existência PréviaQuando o campo [Buscar] for preenchido com o valor ‘Programador${datahora atual}’E o comando [Buscar] do tipo [Botão] for acionadoEntão nenhum item deve estar retornado na pesquisaQuando o comando [Criar Cargo] do tipo [Botão] for acionadoE o campo [Nome] for preenchido com o valor ‘Programador${datahora atual}’E o comando [Salvar] for acionadoEntão deve ser exibida a mensagem ‘Os dados foram salvos com sucesso.’

Feature e Glue code

@Quando("^o campo \\[(.+)\\] for preenchido com o valor '(.+)'$")public void preencherValorDoCampoCucumber(String rotulo, String valor) { paginaBase.paginaPreencher.preencherValorDoCampo(driver, rotulo, valor);}

Page 10: Framework de testes cecom

Execução da feature

Page 11: Framework de testes cecom

Resultado da execução

LEGENDA:

. PASSOU- NÃO FOI EXECUTADOF FALHOUU PASSO NÃO DEFINIDO

Page 12: Framework de testes cecom

● Estrutura organizada● separação por tipos de interação● uso de interfaces

● Facilidade na adição de novos padrões de sistema● Facilidade na adição de novos passos● Instalação e configuração simplificadas● Manutenção simples, com indicação de elementos

facilitada (sem XPath)● Relatório para visualização do resultado dos testes

executados● Abrangente; atende bem ao padrão atual (sistema SIGA)

Características Atuais do Framework

Page 13: Framework de testes cecom

Estrutura organizada, com facilidade na adição de novos padrões de sistema

teste.paginas.reuso.passosCucumber teste.paginas.reuso.interfacesFramework

ACIONAR

PREENCHER

GERAIS

VERIFICAR

ACIONAR

PREENCHER

BUSCAR

GERAIS

VERIFICAR

teste.paginas.reuso.implementacoesFramework.ejb3

ACIONARPREENCHE

RBUSCAR GERAIS VERIFICARimplementaçõesEspecificasProjetoDeTeste.

ejb3

Passo 1: Implementar novos métodos para o novo padrão de sistema

LOGIN

Page 14: Framework de testes cecom

Facilidade na adição de novos padrões de sistema

Passo 2: Estender a classe

Passo 3: Sobrescrever o método

Passo 4: Adicionar bind

Page 15: Framework de testes cecom

Estrutura para adição de novos passos

Regras locais

Específicos para cada projeto

Regras globais

(genéricos)Utilizados emdiversos projetos

Framework

Projeto de teste

Page 16: Framework de testes cecom

Facilidade na adição de novos passos globais

teste.paginas.reuso.passosCucumber teste.paginas.reuso.interfacesFramework

ACIONAR

PREENCHER

GERAIS

VERIFICAR

ACIONAR

PREENCHER

BUSCAR

GERAIS

VERIFICAR

teste.paginas.reuso.implementacoesFramework.ejb3

ACIONARPREENCHE

RBUSCAR GERAIS VERIFICAR

NOVO PASSO GLOBAL

1. Criar novo passo

cucumber

2. Declarar novo método

3. Implementar novo

método

Page 17: Framework de testes cecom

Comparação do processo de adição de novos passos

Antes

● Cada projeto de teste criado como uma cópia do projeto do Framework.

● Definição de novos passos e funções de forma independente e com transmissão informal (cada desenvolvedor passando a sua implementação para os que a desejassem utilizar).

Depois

● Cada projeto de teste criado como um projeto que importa o código do Framework como uma dependência.

● Todo projeto utiliza os passos gerais do Framework, utilizando passos específicos para o sistema apenas quando necessário.

● Caso um passo criado seja geral o suficiente e de uso comum em um grande número de sistemas, ele é inserido no Framework, para futuro reuso.

Configuração de novo projeto de testesDefinição de novos passos e métodos globais

Page 18: Framework de testes cecom

ConfiguracaoSelenium

SharedDriver

RunFeature.launch

VerificaFeature.launch

PropriedadesLogin

PaginaLogin

Instalação e configuração simplificadas

Passo 1: Criar estrutura de diretóriosPasso 2: Estender classesPasso 3: Informar dados de acesso à aplicação:

PropriedadesLogin<NomeProjeto>

PaginaLogin<NomeProjeto>

RunFeature.launch

VerificaFeature.launch

PropriedadesLogin

PaginaLogin

DATABASE

PÁGINAS

ConfiguracaoSelenium

SharedDriver

RunFeature.launch

VerificaFeature.launch

FRAMEWORK

REUSO

ConfiguracaoSelenium<NomeProjeto>

SharedDriver<NomeProjeto>

PROJETO DE TESTES

DATABASE

PÁGINAS

REUSO

WebDriverModule

CAMINHO = ”/<NomeProjeto>/home.seam”;SENHA_PADRAO = ”♦♦♦♦♦♦”;

@Dado("^que o usuário (.+) esteja logado na página Home do <SistemaTestado>$")

SERVIDOR=”http://<ServidorDeTeste>.ufmg.br”

Instancia ConfiguracaoSelenium<NomeProjeto>

Bind com SharedDriver<NomeProjeto>

Page 19: Framework de testes cecom

Instalação e configuração simplificadas

Antes

● Configuradas como variáveis de ambiente do workspace do eclipse.

● Para testar cada projeto de teste, era necessário reconfigurar as variáveis do ambiente ou utilizar workspaces separados.

Depois

● Cada projeto de teste define tais variáveis na classe ConfiguracaoSelenium<NomeDoProjetoDeTeste>.

● Dois projetos de teste podem conviver no mesmo workspace sem necessidade de reconfiguração.

Configuração das Variáveis SERVIDOR_APLICAÇÃO, SERVIDOR_SELENIUM e

BROWSER

Page 20: Framework de testes cecom

Manutenção simples do código, sem Xpath

Antes

Depois

Page 21: Framework de testes cecom

● Facilidade na digitação de features

● utilização de plugin no RAD

● Integração contínua

● Jenkins

Melhorias em desenvolvimento

Page 22: Framework de testes cecom

● Recursos● Auxílio na digitação dos passos, com autocomplete de

regras que se enquadram, no momento da digitação● Indicação de erro, em frente a passos que estão sem

regras conhecidas ● Outline View dos elementos que compõem a feature

● Ganhos esperados● tornar a tarefa de especificação de testes mais agradável e

produtiva

Plugin

Page 23: Framework de testes cecom

Plugin

Page 24: Framework de testes cecom

Plugin

Page 25: Framework de testes cecom

Integração contínua

● Prática de desenvolvimento de software onde os membros de uma equipe integram seu trabalho frequentemente.

● Cada integração é verificada por um build automatizado (incluindo os testes) para detectar erros de integração.

● Como o sistema é integrado continuamente, os erros são detectados de forma rápida, não sendo acumulados e não gerando um problema geral no sistema.

● É mais fácil encontrar erros em pequenas integrações do que em uma integração grande.

Page 26: Framework de testes cecom

Integração contínua

Integração contínua

Integração contínua

TIPO DE BUILD CARACTERÍSTICAS

Contínuo / IncrementalExecuta quando o código é alterado no repositório, faz

uma compilação rápida e executa alguns testes unitários.

Diário / NoturnoFaz a compilação completa com todos os testes unitários

e testes adicionais, tais como testes funcionais (Cucumber).

Release (nova versão)Cria um pacote de instalação e, em seguida, executa e

testa todo o processo.

Page 27: Framework de testes cecom

FIM