Demoiselle Behave - Parte 3

6.993 visualizações

Publicada em

Treinamento da ferramenta de automação de testes de software Demoiselle Behave (http://demoiselle.github.io/behave/).

Parte 3: Mostra como realizar testes automáticos em BDD para aplicações Java Desktop

O material de treinamento pode ser encontrado nas instruções a Parte 1 (www.slideshare.net/vandersonsilva9615/treinamento-demoiselle-behave-parte-01)

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
6.993
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5.843
Ações
Compartilhamentos
0
Downloads
38
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Demoiselle Behave - Parte 3

  1. 1. Treinamento:Treinamento: AutomaçãoAutomação de Testesde Testes Módulo 03 – Automação DesktopMódulo 03 – Automação Desktop
  2. 2. Módulo 3 – Automação Desktop 2 IntroduçãoIntrodução  Arquitetura dbehaveArquitetura dbehave Core Parser Runner Integration TECNOLOGIAS JBehave Concordion Cucumber TECNOLOGIAS Selenium FEST TECNOLOGIAS ALM - RQM Foco deste Módulo
  3. 3. Módulo 3 – Automação Desktop 3 Visão GeralVisão Geral 6) acessar sistema 5) selecionar motor de execução 1) iniciar teste 3) ler histórias 4) ler mapeamentos de tela 7) registrar resultados 2) selecionar motor BDD Alvo doAlvo do Módulo 2Módulo 2 Alvo doAlvo do Módulo 3Módulo 3
  4. 4. Módulo 3 – Automação Desktop 4 DependênciasDependências  Módulos RunnersMódulos Runners  Tem por finalidade executar testes sob alguma interface gráfica <dependencies> <dependency> <groupId>br.gov.frameworkdemoiselle.component.behave</groupId> <artifactId>demoiselle-behave-parser-jbehave</artifactId> <version>1.x.x</version> <scope>test</scope> </dependency> <dependency> <groupId>br.gov.frameworkdemoiselle.component.behave</groupId> <artifactId>demoiselle-behave-runner-fest</artifactId> <version>1.4.0</version> <scope>test</scope> </dependency> </dependencies> Incluindo o Runner Fest
  5. 5. Módulo 3 – Automação Desktop 5 Runner FESTRunner FEST  FESTFEST  É uma coleção de bibliotecas, lançada sob a licença Apache 2.0, cuja missão é simplificar os testes automatizados de softwares para Java Desktop.  É composto por vários módulos, que podem ser usados tanto no TestNG como no JUnit.  Site: http://fest.easytesting.org/
  6. 6. Módulo 3 – Automação Desktop 6 Runner FESTRunner FEST  Localizadores de TelaLocalizadores de Tela  No FEST os localizadores de tela utilizam o atributo title da janela como forma de encontrá-los. @ScreenMap(name = "Tela de Login", location = "Autenticação") public class MinhaTelaDeLogin { ...
  7. 7. Módulo 3 – Automação Desktop 7 Runner FESTRunner FEST  Localizadores de elementos de telaLocalizadores de elementos de tela  No FEST os localizadores implemetados são:  Label: Seleciona o objeto de tela que possua o text visível.  Name: Seleciona o objeto de tela que tenha o identificador selecionado pelo desenvolvedor.  ClassName: Seleciona o objeto de tela que tenha a classe definida (JPanel, JButton...)
  8. 8. Módulo 3 – Automação Desktop 8 Runner FESTRunner FEST  Localizadores de Elementos de TelaLocalizadores de Elementos de Tela  Caso haja mais de um elemento com os mesmos atributos, será possível identificá-los pelo índice. O índice é calculado na sequencia em que os elementos são exibidos.  Neste caso utilizar o @ElementIndex, conforme exemplo: @ElementMap(name = "Nome do Campo", locatorType = ElementLocatorType.ClassName, locator = "JTextField") @ElementIndex(index = 1) private TextField atributo; Nome do elemento Busca por Classe Nome da classe a ser localizadaÍndice utilizado quando houvermais de um elemento
  9. 9. Módulo 3 – Automação Desktop 9 Exercício 4Exercício 4  ObjetivoObjetivo  Criar um projeto de testes para Java Desktop;  Entender a aplicação de exemplo;  Conhecer o mapeamento de tela para Java Desktop.
  10. 10. Módulo 3 – Automação Desktop 10 Exercício 2Exercício 2  Criando Projeto 04Criando Projeto 04  Menu: File : New : Maven Project  Vá para a próxima tela (next)  Selecione o Catálogo: Demoiselle Behave  Escolha a última versão do jbehave-fest-archetype Escolha a última versão Escolha a última versão
  11. 11. Módulo 3 – Automação Desktop 11 Exercício 2Exercício 2  Criando Projeto 02Criando Projeto 02  Informe o Group Id: br.gov.serpro.behave  Informe o Artifact Id: projeto04
  12. 12. Módulo 3 – Automação Desktop 12 Exercício 4Exercício 4  Criando Projeto 04Criando Projeto 04  A classe MyFrame é um exemplo de aplicação Java Swing.  Na pasta src/test/java encontra-se os testes e mapeamentos de tela da aplicação exemplo.  Na pasta src/test/resources encontram-se as histórias semelhante ao demais projetos DBehave.
  13. 13. Módulo 3 – Automação Desktop 13 Exercício 4Exercício 4  ExecuçãoExecução  Execute a classe MyTest pelo JUnit
  14. 14. Módulo 3 – Automação Desktop 14 Exercício 4Exercício 4  InicializaçãoInicialização  A aplicação a ser testada precisar estar no classpath do projeto de testes para que se possa manipular seus elementos.  A forma mais simples para inicializar a aplicação é informando a classe que possui o método main por meio da propriedade: behave.runner.app.mainClass=br.gov.serpro.behave.projeto04.MyFrame
  15. 15. Módulo 3 – Automação Desktop 15 Exercício 4Exercício 4  InicializaçãoInicialização  Alguns sistemas possuem uma inicialização mais complexa e por isso não é possível chamar apenas seu main.  Neste caso, crie uma classe do tipo FestStartup para realizar os procedimento necessários de inicialização do seu sistema e Informe esta classe no behave.properties. Interface a ser implemetada Informando seu FestStartup public class MeuFestStartup implements FestStartup { public JFrame getFrame() { //meus procedimentos //retorno do JFrame principal da aplicação return null; } } behave.runner.app.startupFrame=demoisellebehave.treino.MeuFestStartup
  16. 16. Módulo 3 – Automação Desktop 16 Exercício 4Exercício 4  Análise da HistóriaAnálise da História Cenário: Acesso ao Sistema Com Usuário Inválido Dado que vou para a tela "Tela de Login" Então será exibido no "Rótulo Usuário" o valor "Usuário:" Então será exibido no "Rótulo Senha" o valor "Senha:" Quando informo "demoiselleX" no campo "Campo Usuário" E informo "behave" no campo "Campo Senha" Quando clico em "Entrar" Então vou para a tela "Mensagem de Erro" Então será exibido "Usuário ou senha Inválida" Então clico em "OK" Título do cenário Preenchimento dos campos Clica em Entrar A mensagem de erro é exibida
  17. 17. Módulo 3 – Automação Desktop 17 Exercício 4Exercício 4  Análise do Código (Análise do Código (MyTest.java)) private BehaveContext eng = BehaveContext.getInstance(); @Test public void testAllObras() throws Throwable { eng.addStories("/stories"); eng.run(); } Instância o contexto do DBehave Teste JUnit padrão Adiciona a pasta que contém as histórias a serem executadas. Inicia o teste
  18. 18. Módulo 3 – Automação Desktop 18 Exercício 4Exercício 4  Análise do Código (MyScreen.java)Análise do Código (MyScreen.java) @ScreenMap(name = "Tela de Login", location = "Autenticação") public class MyScreen { @ElementMap(name = "Rótulo Usuário", locatorType = ElementLocatorType.Label, locator = "Usuário:") private Label labelUsuario; @ElementMap(name = "Campo Usuário", locatorType = ElementLocatorType.Name, locator = "user") private TextField campoUsuario; ... Title da janela Swing Procura o Elemento pelo Label Procura o Elemento pelo Name
  19. 19. Módulo 3 – Automação Desktop 19 Exercício 5Exercício 5  ObjetivosObjetivos  Criação de passos personalizados  Utilização do ElementMap
  20. 20. Módulo 3 – Automação Desktop 20 Exercício 5Exercício 5  Atualizando o Aplicativo DemoAtualizando o Aplicativo Demo  Iremos adicionar um novo comportamento ao campo de usuário da aplicação de exemplo.  Ao clique do botão direito o sistema exibirá uma mensagem
  21. 21. Módulo 3 – Automação Desktop 21 Exercício 5Exercício 5  Criando Passos CustomizadosCriando Passos Customizados  Substitua o código da classe MyFrame pelo snippet “01 MyFrame.java”  Crie a classe MySteps no pacote br.gov.serpro.behave.projeto04.  Aplique o snippet 02 MySteps.java  Inclua o passo customizado aplicando o snippet 03 MyTest.java na classe MyTest
  22. 22. Módulo 3 – Automação Desktop 22 Exercício 5Exercício 5  Análise do Código (MySteps.java)Análise do Código (MySteps.java) @When("clico com botão direito no campo "$local"") public void rightClick(String local) { FestRunner festRunner = (FestRunner) runner; Element e = runner.getElement(currentPageName, local); DesktopTextField dTF = (DesktopTextField) e; festRunner.robot.click(dTF.getElement(), MouseButton.RIGHT_BUTTON); } Novo passo Obtem o runner desktop Executa a ação de clica oor meio do robo do FEST Obtem o elemento Faz o Cast do objeto para um elemento de UI desktop
  23. 23. Módulo 3 – Automação Desktop 23 Exercício 5Exercício 5  Análise do Código (MyTest.java)Análise do Código (MyTest.java) @Test public void testAllObras() throws Throwable { eng.addSteps(new MySteps()); eng.addStories("/stories/botaoDireito.story"); eng.run(); } Adiciona a nova classe de passos no contexto Adicionamos apenas a história que rodarenis, que será criada na sequência Executa o teste
  24. 24. Módulo 3 – Automação Desktop 24 Exercício 5Exercício 5  Criando HistóriaCriando História  Crie um novo arquivo de história chamado botaoDireito.story  Aplique ao arquivo o snippet 04 botaoDireito.story
  25. 25. Módulo 3 – Automação Desktop 25 Exercício 5Exercício 5  Análise da HistóriaAnálise da História Cenário: Clique com botão direito do mouse Dado que vou para a tela "Tela de Login" Quando clico com botão direito no campo "Campo Usuário" Então vou para a tela "Mensagem de Alerta de Botão Direito" Então será exibido "Você clicou com o botão direito do mouse no campo" Então clico em "OK" Título do cenário Novo passo A mensagem a ser verificada Clica no botão OK
  26. 26. Módulo 3 – Automação Desktop 26 Exercício 5Exercício 5  ExecuçãoExecução  Execute a classe MyTest pelo JUnit e analise a falha gerada. Dado que vou para a tela "Tela de Login" Quando clico com botão direito no campo "Campo Usuário" Então vou para a tela "Mensagem de Alerta de Botão Direito" (FAILED) (br.gov.frameworkdemoiselle.behave.exception.BehaveException: [Mensagem de Alerta de Botão Direito] não encontrada. Verifique seu mapeamento de tela) 11:00:03,969 INFO (pool-1-thread-1) [ScreenShootingMaker]: Precisamos criar o mapeamento para a tela de mensagem
  27. 27. Módulo 3 – Automação Desktop 27 Exercício 5Exercício 5  Criando Nova TelaCriando Nova Tela  Cria a classe MyInfoScreenRightClick  Aplique o snippet 05 MyInfoScreenRightClick.java  Execute pelo JUnit a classe MyTest
  28. 28. Módulo 3 – Automação Desktop 28 br.gov.serpro.behave.projeto04.MyFrame[name='frame0', title='Autenticação',... javax.swing.JRootPane[] javax.swing.JPanel[name='null.glassPane'] javax.swing.JLayeredPane[] javax.swing.JPanel[name='null.contentPane'] javax.swing.JButton[name=null, text='Entrar', enabled=true, ... javax.swing.JLabel[name=null, text='Usuário:', enabled=true, ... javax.swing.JLabel[name=null, text='Senha:', enabled=true, ... javax.swing.JPasswordField[name='password', enabled=true, ... javax.swing.JTextField[name='user', text='', enabled=true, ... javax.swing.JButton[name=null, text='Sair', enabled=true, ... Localização de Elementos de TelaLocalização de Elementos de Tela  Árvore de ComponentesÁrvore de Componentes  Para facilitar a localização dos objetos de tela, o Fest fornece uma visualização completa da árvore de componentes da janela atual no console dos testes Este elemento pode ser encontrado utilizando o localizador ClassName Este elemento pode ser encontrado utilizando o localizador Label Este elemento pode ser encontrado utilizando o localizador Name Janela Atual
  29. 29. Módulo 3 – Automação Desktop 29 Localização de Elementos de TelaLocalização de Elementos de Tela  Árvore de ComponentesÁrvore de Componentes  Visualização no console quando um elemento não é encontrado na janela e a árvore de objetos é mostrada
  30. 30. Módulo 3 – Automação Desktop 30 Exercício 6Exercício 6  ObjetivoObjetivo  Explorar os localizadores de elementos de tela desktop
  31. 31. Módulo 3 – Automação Desktop 31 Exercício 6Exercício 6  Atualizando a HistóriaAtualizando a História  Aplique o snippet 01 botaoDireito.story no arquivo de história botaoDireito.story  Execute pelo JUnit a classe MyTest e um erro será exibido:
  32. 32. Módulo 3 – Automação Desktop 32 Exercício 6Exercício 6  ExecuçãoExecução  Verifique os detalhes do erro no console: E clico em "Sair" (FAILED) (br.gov.frameworkdemoiselle.behave.exception.BehaveException: Elemento [Sair] não encontrado na tela [Tela de Login])
  33. 33. Módulo 3 – Automação Desktop 33 Exercício 6Exercício 6  Criando Mapeamento do Botão SairCriando Mapeamento do Botão Sair  Aplique o snippet 02 MyScreen.java no arquivo MyScreen.java dentro do pacote br.gov.serpro.behave.projeto04  As seguintes linhas serão adicionadas ao arquivo @ElementMap(name = "Sair", locatorType = ElementLocatorType.ClassName, locator = "NOME_DA_CLASSE_DO_OBJETO") private Button botaoSair; Nome do objeto na história Buscará o objeto pelo nome da classe Nome da classe que será busca
  34. 34. Módulo 3 – Automação Desktop 34 Exercício 6Exercício 6  ExecuçãoExecução  Verifique os detalhes do erro no console E clico em "Sair" (FAILED) (br.gov.frameworkdemoiselle.behave.exception.BehaveException: Elemento não encontrado. Container: br.gov.serpro.behave.projeto04.MyFrame[frame0,550,370,331x158,layout=java.awt.... ---------------------------------------------- Árvore de objetos: br.gov.serpro.behave.projeto04.MyFrame[name='frame0', title='Autenticação', ... javax.swing.JRootPane[] javax.swing.JPanel[name='null.glassPane'] javax.swing.JLayeredPane[] javax.swing.JPanel[name='null.contentPane'] javax.swing.JButton[name=null, text='Entrar', enabled=true, ... javax.swing.JLabel[name=null, text='Usuário:', enabled=true, ... javax.swing.JLabel[name=null, text='Senha:', enabled=true, ... javax.swing.JPasswordField[name='password', enabled=true, ... javax.swing.JTextField[name='user', text='', enabled=true, ... javax.swing.JButton[name=null, text='Sair', enabled=true, ... Mensagem de alerta Objeto que devemos mapear
  35. 35. Módulo 3 – Automação Desktop 35 Exercício 6Exercício 6  Melhorando o Mapeamento do Botão SairMelhorando o Mapeamento do Botão Sair  Antes  Depois @ElementMap(name = "Sair", locatorType = ElementLocatorType.ClassName, locator = "NOME_DA_CLASSE_DO_OBJETO") private Button botaoSair; @ElementMap(name = "Sair", locatorType = ElementLocatorType.ClassName, locator = "JButton") @ElementIndex(index = 1) private Button botaoSair; Buscaremos pela classe JButton Pegaremos a segunda ocorrência
  36. 36. Módulo 3 – Automação Desktop 36 Exercício 6Exercício 6  ExecuçãoExecução  Execute pelo JUnit a classe MyTest  Seu teste deve passar com sucesso
  37. 37. Módulo 3 – Automação Desktop 37 Conclusão do MóduloConclusão do Módulo  ResumoResumo  Vimos como funciona o Runner do Demoiselle Behave para aplicações Java Desktop;  Experimentamos o uso da API Fest;  Verificamos que a construção de histórias no DBehave é um processo que independe da interface gráfica a ser testada.

×