SlideShare una empresa de Scribd logo
1 de 37
Descargar para leer sin conexión
Treinamento:Treinamento:
AutomaçãoAutomação
de Testesde Testes
Módulo 03 – Automação DesktopMódulo 03 – Automação Desktop
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
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
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
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/
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 {
...
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...)
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
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.
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
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
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.
Módulo 3 – Automação Desktop 13
Exercício 4Exercício 4

ExecuçãoExecução
 Execute a classe MyTest pelo JUnit
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
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
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
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
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
Módulo 3 – Automação Desktop 19
Exercício 5Exercício 5

ObjetivosObjetivos
 Criação de passos personalizados
 Utilização do ElementMap
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
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
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
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
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
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
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
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
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
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
Módulo 3 – Automação Desktop 30
Exercício 6Exercício 6

ObjetivoObjetivo
 Explorar os localizadores de elementos de tela desktop
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:
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])
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
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
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
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
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.

Más contenido relacionado

La actualidad más candente

13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driverJúlio de Lima
 
Tipos de automação de teste
Tipos de automação de testeTipos de automação de teste
Tipos de automação de testeMarcos Pessoa
 
98796699 selenium-framework
98796699 selenium-framework98796699 selenium-framework
98796699 selenium-frameworkAndré Caldas
 
Introdução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumIntrodução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumSandy Maciel
 
Java Fx Guia De IntroduçãO
Java Fx Guia De IntroduçãOJava Fx Guia De IntroduçãO
Java Fx Guia De IntroduçãOdanielfc
 
Automatização de testes funcionais com selenium etapa 1
Automatização de testes funcionais com selenium  etapa 1Automatização de testes funcionais com selenium  etapa 1
Automatização de testes funcionais com selenium etapa 1Cintia Armesto
 
Selenium
SeleniumSelenium
Seleniumfatec
 
Leitor de Códigos no Android com Barcode Scanner API - ZXing
Leitor de Códigos no Android com Barcode Scanner API - ZXingLeitor de Códigos no Android com Barcode Scanner API - ZXing
Leitor de Códigos no Android com Barcode Scanner API - ZXingVinícius Thiengo
 
Automação de Teste Funcionais - Selenium
Automação de Teste Funcionais - SeleniumAutomação de Teste Funcionais - Selenium
Automação de Teste Funcionais - SeleniumIsrael Santiago
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de softwarericardophp
 
Automacão de Testes Funcionais com Selenium
Automacão de Testes Funcionais com SeleniumAutomacão de Testes Funcionais com Selenium
Automacão de Testes Funcionais com SeleniumFabrício Lemos
 
PDC - Testes - Usando o Testlink
PDC - Testes - Usando o TestlinkPDC - Testes - Usando o Testlink
PDC - Testes - Usando o Testlinkslides_teltools
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshopguestd37c23
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015Renato Groff
 
Automação de testes funcionais com selenium webdriver
Automação de testes funcionais com selenium webdriverAutomação de testes funcionais com selenium webdriver
Automação de testes funcionais com selenium webdriverQualister
 
O que esperar do Zend Framework 2
O que esperar do Zend Framework 2O que esperar do Zend Framework 2
O que esperar do Zend Framework 2Flávio Lisboa
 

La actualidad más candente (20)

13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
 
Tipos de automação de teste
Tipos de automação de testeTipos de automação de teste
Tipos de automação de teste
 
Hands On Selenium
Hands On SeleniumHands On Selenium
Hands On Selenium
 
98796699 selenium-framework
98796699 selenium-framework98796699 selenium-framework
98796699 selenium-framework
 
Introdução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumIntrodução a testes de software utilizando selenium
Introdução a testes de software utilizando selenium
 
Teste Driven Development
Teste Driven DevelopmentTeste Driven Development
Teste Driven Development
 
Java Fx Guia De IntroduçãO
Java Fx Guia De IntroduçãOJava Fx Guia De IntroduçãO
Java Fx Guia De IntroduçãO
 
Selenium: visão geral
Selenium: visão geralSelenium: visão geral
Selenium: visão geral
 
Automatização de testes funcionais com selenium etapa 1
Automatização de testes funcionais com selenium  etapa 1Automatização de testes funcionais com selenium  etapa 1
Automatização de testes funcionais com selenium etapa 1
 
Selenium
SeleniumSelenium
Selenium
 
Leitor de Códigos no Android com Barcode Scanner API - ZXing
Leitor de Códigos no Android com Barcode Scanner API - ZXingLeitor de Códigos no Android com Barcode Scanner API - ZXing
Leitor de Códigos no Android com Barcode Scanner API - ZXing
 
Automação de Teste Funcionais - Selenium
Automação de Teste Funcionais - SeleniumAutomação de Teste Funcionais - Selenium
Automação de Teste Funcionais - Selenium
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
 
Automacão de Testes Funcionais com Selenium
Automacão de Testes Funcionais com SeleniumAutomacão de Testes Funcionais com Selenium
Automacão de Testes Funcionais com Selenium
 
PDC - Testes - Usando o Testlink
PDC - Testes - Usando o TestlinkPDC - Testes - Usando o Testlink
PDC - Testes - Usando o Testlink
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshop
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015
 
Selenium
SeleniumSelenium
Selenium
 
Automação de testes funcionais com selenium webdriver
Automação de testes funcionais com selenium webdriverAutomação de testes funcionais com selenium webdriver
Automação de testes funcionais com selenium webdriver
 
O que esperar do Zend Framework 2
O que esperar do Zend Framework 2O que esperar do Zend Framework 2
O que esperar do Zend Framework 2
 

Similar a Demoiselle Behave - Parte 3

Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
Introdução À Automação de Testes com Selenium
Introdução À Automação de Testes com SeleniumIntrodução À Automação de Testes com Selenium
Introdução À Automação de Testes com Seleniumrodrigogouveia
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5Diego Pacheco
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade IIIJoão Lourenço
 
Teste para dispositivos móveis apresentação pra ufam -eliane
Teste para dispositivos móveis   apresentação pra ufam -elianeTeste para dispositivos móveis   apresentação pra ufam -eliane
Teste para dispositivos móveis apresentação pra ufam -elianeEliane Collins
 
Teste unitário
Teste unitárioTeste unitário
Teste unitáriodist_bp
 
Tutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper jsTutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper js4ALL Tests
 
Tutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJSTutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJSFrederico Allan
 
Capítulo 12 - Fragments
Capítulo 12 - FragmentsCapítulo 12 - Fragments
Capítulo 12 - FragmentsMarcio Palheta
 
Ferramentas de automação de teste
Ferramentas de automação de testeFerramentas de automação de teste
Ferramentas de automação de testeMarcos Pessoa
 
Spring & Struts
Spring & StrutsSpring & Struts
Spring & Strutseduan
 

Similar a Demoiselle Behave - Parte 3 (20)

Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
Java swingcomponentes
Java swingcomponentesJava swingcomponentes
Java swingcomponentes
 
Introdução À Automação de Testes com Selenium
Introdução À Automação de Testes com SeleniumIntrodução À Automação de Testes com Selenium
Introdução À Automação de Testes com Selenium
 
Java1
Java1Java1
Java1
 
JUnit
JUnitJUnit
JUnit
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
 
Teste para dispositivos móveis apresentação pra ufam -eliane
Teste para dispositivos móveis   apresentação pra ufam -elianeTeste para dispositivos móveis   apresentação pra ufam -eliane
Teste para dispositivos móveis apresentação pra ufam -eliane
 
Teste unitário
Teste unitárioTeste unitário
Teste unitário
 
Java5
Java5Java5
Java5
 
Tutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper jsTutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper js
 
Tutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJSTutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJS
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
Tutorial java swing
Tutorial java swingTutorial java swing
Tutorial java swing
 
Capítulo 12 - Fragments
Capítulo 12 - FragmentsCapítulo 12 - Fragments
Capítulo 12 - Fragments
 
Ferramentas de automação de teste
Ferramentas de automação de testeFerramentas de automação de teste
Ferramentas de automação de teste
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Spring & Struts
Spring & StrutsSpring & Struts
Spring & Struts
 

Demoiselle Behave - Parte 3

  • 1. Treinamento:Treinamento: AutomaçãoAutomação de Testesde Testes Módulo 03 – Automação DesktopMódulo 03 – Automação Desktop
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Módulo 3 – Automação Desktop 13 Exercício 4Exercício 4  ExecuçãoExecução  Execute a classe MyTest pelo JUnit
  • 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. 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. 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. 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. 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. Módulo 3 – Automação Desktop 19 Exercício 5Exercício 5  ObjetivosObjetivos  Criação de passos personalizados  Utilização do ElementMap
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Módulo 3 – Automação Desktop 30 Exercício 6Exercício 6  ObjetivoObjetivo  Explorar os localizadores de elementos de tela desktop
  • 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. 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. 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. 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. 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. 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. 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.