Demoiselle Behave - Parte 3

  • Published on
    06-Jun-2015

  • View
    2.069

  • Download
    5

Embed Size (px)

DESCRIPTION

Treinamento da ferramenta de automao de testes de software Demoiselle Behave (http://demoiselle.github.io/behave/). Parte 3: Mostra como realizar testes automticos em BDD para aplicaes Java Desktop O material de treinamento pode ser encontrado nas instrues a Parte 1 (www.slideshare.net/vandersonsilva9615/treinamento-demoiselle-behave-parte-01)

Transcript

  • 1. Treinamento:Treinamento: AutomaoAutomao de Testesde Testes Mdulo 03 Automao DesktopMdulo 03 Automao Desktop

2. Mdulo 3 Automao Desktop 2 IntroduoIntroduo Arquitetura dbehaveArquitetura dbehave Core Parser Runner Integration TECNOLOGIAS JBehave Concordion Cucumber TECNOLOGIAS Selenium FEST TECNOLOGIAS ALM - RQM Foco deste Mdulo 3. Mdulo 3 Automao Desktop 3 Viso GeralViso Geral 6) acessar sistema 5) selecionar motor de execuo 1) iniciar teste 3) ler histrias 4) ler mapeamentos de tela 7) registrar resultados 2) selecionar motor BDD Alvo doAlvo do Mdulo 2Mdulo 2 Alvo doAlvo do Mdulo 3Mdulo 3 4. Mdulo 3 Automao Desktop 4 DependnciasDependncias Mdulos RunnersMdulos Runners Tem por finalidade executar testes sob alguma interface grfica br.gov.frameworkdemoiselle.component.behavedemoiselle-behave-parser-jbehave1.x.xtestbr.gov.frameworkdemoiselle.component.behavedemoiselle-behave-runner-fest1.4.0test Incluindo o Runner Fest 5. Mdulo 3 Automao Desktop 5 Runner FESTRunner FEST FESTFEST uma coleo de bibliotecas, lanada sob a licena Apache 2.0, cuja misso simplificar os testes automatizados de softwares para Java Desktop. composto por vrios mdulos, que podem ser usados tanto no TestNG como no JUnit. Site: http://fest.easytesting.org/ 6. Mdulo 3 Automao 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 = "Autenticao") public class MinhaTelaDeLogin { ... 7. Mdulo 3 Automao Desktop 7 Runner FESTRunner FEST Localizadores de elementos de telaLocalizadores de elementos de tela No FEST os localizadores implemetados so: Label: Seleciona o objeto de tela que possua o text visvel. 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. Mdulo 3 Automao 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 possvel identific-los pelo ndice. O ndice calculado na sequencia em que os elementos so 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 localizadandice utilizado quando houvermais de um elemento 9. Mdulo 3 Automao Desktop 9 Exerccio 4Exerccio 4 ObjetivoObjetivo Criar um projeto de testes para Java Desktop; Entender a aplicao de exemplo; Conhecer o mapeamento de tela para Java Desktop. 10. Mdulo 3 Automao Desktop 10 Exerccio 2Exerccio 2 Criando Projeto 04Criando Projeto 04 Menu: File : New : Maven Project V para a prxima tela (next) Selecione o Catlogo: Demoiselle Behave Escolha a ltima verso do jbehave-fest-archetype Escolha a ltima verso Escolha a ltima verso 11. Mdulo 3 Automao Desktop 11 Exerccio 2Exerccio 2 Criando Projeto 02Criando Projeto 02 Informe o Group Id: br.gov.serpro.behave Informe o Artifact Id: projeto04 12. Mdulo 3 Automao Desktop 12 Exerccio 4Exerccio 4 Criando Projeto 04Criando Projeto 04 A classe MyFrame um exemplo de aplicao Java Swing. Na pasta src/test/java encontra-se os testes e mapeamentos de tela da aplicao exemplo. Na pasta src/test/resources encontram-se as histrias semelhante ao demais projetos DBehave. 13. Mdulo 3 Automao Desktop 13 Exerccio 4Exerccio 4 ExecuoExecuo Execute a classe MyTest pelo JUnit 14. Mdulo 3 Automao Desktop 14 Exerccio 4Exerccio 4 InicializaoInicializao A aplicao 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 aplicao informando a classe que possui o mtodo main por meio da propriedade: behave.runner.app.mainClass=br.gov.serpro.behave.projeto04.MyFrame 15. Mdulo 3 Automao Desktop 15 Exerccio 4Exerccio 4 InicializaoInicializao Alguns sistemas possuem uma inicializao mais complexa e por isso no possvel chamar apenas seu main. Neste caso, crie uma classe do tipo FestStartup para realizar os procedimento necessrios de inicializao 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 aplicao return null; } } behave.runner.app.startupFrame=demoisellebehave.treino.MeuFestStartup 16. Mdulo 3 Automao Desktop 16 Exerccio 4Exerccio 4 Anlise da HistriaAnlise da Histria Cenrio: Acesso ao Sistema Com Usurio Invlido Dado que vou para a tela "Tela de Login" Ento ser exibido no "Rtulo Usurio" o valor "Usurio:" Ento ser exibido no "Rtulo Senha" o valor "Senha:" Quando informo "demoiselleX" no campo "Campo Usurio" E informo "behave" no campo "Campo Senha" Quando clico em "Entrar" Ento vou para a tela "Mensagem de Erro" Ento ser exibido "Usurio ou senha Invlida" Ento clico em "OK" Ttulo do cenrio Preenchimento dos campos Clica em Entrar A mensagem de erro exibida 17. Mdulo 3 Automao Desktop 17 Exerccio 4Exerccio 4 Anlise do Cdigo (Anlise do Cdigo (MyTest.java)) private BehaveContext eng = BehaveContext.getInstance(); @Test public void testAllObras() throws Throwable { eng.addStories("/stories"); eng.run(); } Instncia o contexto do DBehave Teste JUnit padro Adiciona a pasta que contm as histrias a serem executadas. Inicia o teste 18. Mdulo 3 Automao Desktop 18 Exerccio 4Exerccio 4 Anlise do Cdigo (MyScreen.java)Anlise do Cdigo (MyScreen.java) @ScreenMap(name = "Tela de Login", location = "Autenticao") public class MyScreen { @ElementMap(name = "Rtulo Usurio", locatorType = ElementLocatorType.Label, locator = "Usurio:") private Label labelUsuario; @ElementMap(name = "Campo Usurio", locatorType = ElementLocatorType.Name, locator = "user") private TextField campoUsuario; ... Title da janela Swing Procura o Elemento pelo Label Procura o Elemento pelo Name 19. Mdulo 3 Automao Desktop 19 Exerccio 5Exerccio 5 ObjetivosObjetivos Criao de passos personalizados Utilizao do ElementMap 20. Mdulo 3 Automao Desktop 20 Exerccio 5Exerccio 5 Atualizando o Aplicativo DemoAtualizando o Aplicativo Demo Iremos adicionar um novo comportamento ao campo de usurio da aplicao de exemplo. Ao clique do boto direito o sistema exibir uma mensagem 21. Mdulo 3 Automao Desktop 21 Exerccio 5Exerccio 5 Criando Passos CustomizadosCriando Passos Customizados Substitua o cdigo 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. Mdulo 3 Automao Desktop 22 Exerccio 5Exerccio 5 Anlise do Cdigo (MySteps.java)Anlise do Cdigo (MySteps.java) @When("clico com boto 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 ao de clica oor meio do robo do FEST Obtem o elemento Faz o Cast do objeto para um elemento de UI desktop 23. Mdulo 3 Automao Desktop 23 Exerccio 5Exerccio 5 Anlise do Cdigo (MyTest.java)Anlise do Cdigo (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 histria que rodarenis, que ser criada na sequncia Executa o teste 24. Mdulo 3 Automao Desktop 24 Exerccio 5Exerccio 5 Criando HistriaCriando Histria Crie um novo arquivo de histria chamado botaoDireito.story Aplique ao arquivo o snippet 04 botaoDireito.story 25. Mdulo 3 Automao Desktop 25 Exerccio 5Exerccio 5 Anlise da HistriaAnlise da Histria Cenrio: Clique com boto direito do mouse Dado que vou para a tela "Tela de Login" Quando clico com boto direito no campo "Campo Usurio" Ento vou para a tela "Mensagem de Alerta de Boto Direito" Ento ser exibido "Voc clicou com o boto direito do mouse no campo" Ento clico em "OK" Ttulo do cenrio Novo passo A mensagem a ser verificada Clica no boto OK 26. Mdulo 3 Automao Desktop 26 Exerccio 5Exerccio 5 ExecuoExecuo Execute a classe MyTest pelo JUnit e analise a falha gerada. Dado que vou para a tela "Tela de Login" Quando clico com boto direito no campo "Campo Usurio" Ento vou para a tela "Mensagem de Alerta de Boto Direito" (FAILED) (br.gov.frameworkdemoiselle.behave.exception.BehaveException: [Mensagem de Alerta de Boto Direito] no 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. Mdulo 3 Automao Desktop 27 Exerccio 5Exerccio 5 Criando Nova TelaCriando Nova Tela Cria a classe MyInfoScreenRightClick Aplique o snippet 05 MyInfoScreenRightClick.java Execute pelo JUnit a classe MyTest 28. Mdulo 3 Automao Desktop 28 br.gov.serpro.behave.projeto04.MyFrame[name='frame0', title='Autenticao',... 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='Usurio:', 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, ... Localizao de Elementos de TelaLocalizao de Elementos de Tela rvore de Componentesrvore de Componentes Para facilitar a localizao dos objetos de tela, o Fest fornece uma visualizao 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. Mdulo 3 Automao Desktop 29 Localizao de Elementos de TelaLocalizao de Elementos de Tela rvore de Componentesrvore de Componentes Visualizao no console quando um elemento no encontrado na janela e a rvore de objetos mostrada 30. Mdulo 3 Automao Desktop 30 Exerccio 6Exerccio 6 ObjetivoObjetivo Explorar os localizadores de elementos de tela desktop 31. Mdulo 3 Automao Desktop 31 Exerccio 6Exerccio 6 Atualizando a HistriaAtualizando a Histria Aplique o snippet 01 botaoDireito.story no arquivo de histria botaoDireito.story Execute pelo JUnit a classe MyTest e um erro ser exibido: 32. Mdulo 3 Automao Desktop 32 Exerccio 6Exerccio 6 ExecuoExecuo Verifique os detalhes do erro no console: E clico em "Sair" (FAILED) (br.gov.frameworkdemoiselle.behave.exception.BehaveException: Elemento [Sair] no encontrado na tela [Tela de Login]) 33. Mdulo 3 Automao Desktop 33 Exerccio 6Exerccio 6 Criando Mapeamento do Boto SairCriando Mapeamento do Boto Sair Aplique o snippet 02 MyScreen.java no arquivo MyScreen.java dentro do pacote br.gov.serpro.behave.projeto04 As seguintes linhas sero adicionadas ao arquivo @ElementMap(name = "Sair", locatorType = ElementLocatorType.ClassName, locator = "NOME_DA_CLASSE_DO_OBJETO") private Button botaoSair; Nome do objeto na histria Buscar o objeto pelo nome da classe Nome da classe que ser busca 34. Mdulo 3 Automao Desktop 34 Exerccio 6Exerccio 6 ExecuoExecuo Verifique os detalhes do erro no console E clico em "Sair" (FAILED) (br.gov.frameworkdemoiselle.behave.exception.BehaveException: Elemento no 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='Autenticao', ... 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='Usurio:', 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. Mdulo 3 Automao Desktop 35 Exerccio 6Exerccio 6 Melhorando o Mapeamento do Boto SairMelhorando o Mapeamento do Boto 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 ocorrncia 36. Mdulo 3 Automao Desktop 36 Exerccio 6Exerccio 6 ExecuoExecuo Execute pelo JUnit a classe MyTest Seu teste deve passar com sucesso 37. Mdulo 3 Automao Desktop 37 Concluso do MduloConcluso do Mdulo ResumoResumo Vimos como funciona o Runner do Demoiselle Behave para aplicaes Java Desktop; Experimentamos o uso da API Fest; Verificamos que a construo de histrias no DBehave um processo que independe da interface grfica a ser testada.