Framework de testes cecom

224 visualizações

Publicada em

Apresentação da atual estrutura do framework testes do Centro de Computação da Universidade Federal de Minas Gerais

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
224
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1
Ações
Compartilhamentos
0
Downloads
5
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • regressão: quando uma versão é lançada, e esta atualização gera erros em componentes já analisados
  • Framework de testes cecom

    1. 1. Framework de Testes Centro de Computação da UFMG Julho de 2014
    2. 2. 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
    3. 3. ● 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?
    4. 4. ● 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
    5. 5. Funcionalidade: Teste do CRUD Gerir Cargo do Quem é Quem Contexto: Cadastrar, Alterar, Buscar e Excluir Dado que o usuario vini esteja logado na página Home do Quem é Quem Quando o usuário focar o menu Cadastro E for acionado o submenu Gerir Cargos do Quem é Quem Cenário: Inserir Cargos - Verifica Existência Prévia Quando o campo [Buscar] for preenchido com o valor ‘Programador${datahora atual}’ E o comando [Buscar] do tipo [Botão] for acionado Então nenhum item deve estar retornado na pesquisa Quando o comando [Criar Cargo] do tipo [Botão] for acionado E o campo [Nome] for preenchido com o valor ‘Programador${datahora atual}’ E o comando [Salvar] for acionado Então deve ser exibida a mensagem ‘Os dados foram salvos com sucesso.’ .feature
    6. 6. ● 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
    7. 7. Estrutura dos testes @Dado … @Entao public void { ... }
    8. 8. @Quando ("^o usuário focar o menu (.+)$") public void focarMenuCucumber(String menu) throws Throwable { paginaBase.paginaGerais.focaMenu(driver, menu); } Feature e Glue code Funcionalidade: Teste do CRUD Gerir Cargo do Quem é Quem Contexto: Cadastrar, Alterar, Buscar e Excluir Dado que o usuario vini esteja logado na página Home do Quem é Quem Quando o usuário focar o menu Cadastro E for acionado o submenu Gerir Cargos do Quem é Quem Cenário: Inserir Cargos - Verifica Existência Prévia Quando o campo [Buscar] for preenchido com o valor ‘Programador${datahora atual}’ E o comando [Buscar] do tipo [Botão] for acionado Então nenhum item deve estar retornado na pesquisa Quando o comando [Criar Cargo] do tipo [Botão] for acionado E o campo [Nome] for preenchido com o valor ‘Programador${datahora atual}’ E o comando [Salvar] for acionado Então deve ser exibida a mensagem ‘Os dados foram salvos com sucesso.’
    9. 9. Funcionalidade: Teste do CRUD Gerir Cargo do Quem é Quem Contexto: Cadastrar, Alterar, Buscar e Excluir Dado que o usuario vini esteja logado na página Home do Quem é Quem Quando o usuário focar o menu Cadastro E for acionado o submenu Gerir Cargos do Quem é Quem Cenário: Inserir Cargos - Verifica Existência Prévia Quando o campo [Buscar] for preenchido com o valor ‘Programador${datahora atual}’ E o comando [Buscar] do tipo [Botão] for acionado Então nenhum item deve estar retornado na pesquisa Quando o comando [Criar Cargo] do tipo [Botão] for acionado E o campo [Nome] for preenchido com o valor ‘Programador${datahora atual}’ E o comando [Salvar] for acionado Entã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); }
    10. 10. Execução da feature
    11. 11. Resultado da execução LEGENDA: . PASSOU - NÃO FOI EXECUTADO F FALHOU U PASSO NÃO DEFINIDO
    12. 12. ● 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
    13. 13. 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 ACIONAR PREENCHERBUSCAR GERAIS VERIFICAR implementaçõesEspecificasProjetoDeTeste.ejb3 Passo 1: Implementar novos métodos para o novo padrão de sistema LOGIN
    14. 14. 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
    15. 15. Estrutura para adição de novos passos Regras locais Específicos para cada projeto Regras globais (genéricos) Utilizados em diversos projetos Framework Projeto de teste
    16. 16. 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 ACIONAR PREENCHERBUSCAR GERAIS VERIFICAR NOVO PASSO GLOBAL 1. Criar novo passo cucumber 2. Declarar novo método 3. Implementar novo método
    17. 17. 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 testes Definição de novos passos e métodos globais
    18. 18. ConfiguracaoSelenium SharedDriver RunFeature.launch VerificaFeature.launch PropriedadesLogin PaginaLogin Instalação e configuração simplificadas Passo 1: Criar estrutura de diretórios Passo 2: Estender classes Passo 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>
    19. 19. 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<NomeDoProjetoDe Teste>. ● 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
    20. 20. Manutenção simples do código, sem Xpath Antes Depois
    21. 21. ● Facilidade na digitação de features ● utilização de plugin no RAD ● Integração contínua ● Jenkins Melhorias em desenvolvimento
    22. 22. ● 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
    23. 23. Plugin
    24. 24. Plugin
    25. 25. 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.
    26. 26. Integração contínua TIPO DE BUILD CARACTERÍSTICAS Contínuo / Incremental Executa quando o código é alterado no repositório, faz uma compilação rápida e executa alguns testes unitários. Diário / Noturno Faz 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.
    27. 27. FIM

    ×