SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
Automação de Testes de Software com:Automação de Testes de Software com:
DemoiselleDemoiselle BehaveBehave
Julian Cesar dos SantosJulian Cesar dos Santos
Vanderson Botêlho da SilvaVanderson Botêlho da Silva
Demoiselle BehaveDemoiselle Behave
BDD - Behavior Driven DevelopmentBDD - Behavior Driven Development
UmaUma técnica de desenvolvimento ágiltécnica de desenvolvimento ágil
criado porcriado por Dan NorthDan North que integra regras de negócio comque integra regras de negócio com
automação de testes.automação de testes.
EvoluçãoEvolução do TDD:do TDD:
PorPor onde começaonde começa o processo?o processo?
O queO que testar e o que não testar?testar e o que não testar?
O queO que chamamoschamamos de teste?de teste?
ComoComo analisar falhasanalisar falhas??
Demoiselle BehaveDemoiselle Behave
MotivaçãoMotivação
Porque usar BDD?Porque usar BDD?
Demoiselle BehaveDemoiselle Behave
MotivaçãoMotivação

Especificação de ComportamentoEspecificação de Comportamento
 Um dos grandes problemas na construção de um software é
não entender exatamente o que ele deve fazer
Demoiselle BehaveDemoiselle Behave
MotivaçãoMotivação
UseUse histórias concretashistórias concretas
para ilustrar o que separa ilustrar o que se
deseja do softwaredeseja do software
Demoiselle BehaveDemoiselle Behave
MotivaçãoMotivação
Cenários de uso são maisCenários de uso são mais eficienteseficientes
na comunicaçãona comunicação do que descrições.do que descrições.
Demoiselle BehaveDemoiselle Behave
MotivaçãoMotivação
Exemplos reaisExemplos reais
nosnos mantêm conectadosmantêm conectados
com a visão dos nossoscom a visão dos nossos
stakeholdersstakeholders
Demoiselle BehaveDemoiselle Behave
MotivaçãoMotivação
Como isso Funciona na Práticana Prática
Demoiselle BehaveDemoiselle Behave
FuncionamentoFuncionamento
Funcionalidade: Operar a Calculadora
Narrativa:
Para obter as operações básicas da calculadora
Como um usuário qualquer
Desejo resolver problemas matemáticos de forma mais rápida
Cenário: Somar
Dado que inicio a Calculadora
Quando adiciono "5"
E adiciono "7"
Então seu valor será "12" Escreva suas histórias
Demoiselle BehaveDemoiselle Behave
FuncionamentoFuncionamento
Cenário: Somar
Dado que inicio a Calculadora
Quando adiciono "5"
E adiciono "7"
Então seu valor será "12"
@When("Quando inicio a Calculadora")
public void goToWithName(String local) {
}
@When("adiciono "$valor"")
public void whenAdiciono(double valor) {
}
@Then("seu valor será "$valor"")
public void thenSeuValorSera(double valor) {
}
Suas frases devem ser
mapeadas em métodos
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

ObjetivoObjetivo
 Para testes sob interfaces gráficas o mapeamento de tela visa
desacoplar os elementos de tela ao script de automação.

BenefíciosBenefícios
 Evita duplicação de código;
 Maior manutenibilidade: se houver mudanças na tela a
correção deverá ser aplicada em um único lugar.
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Diferenças para um Page ObjectDiferenças para um Page Object
 Os mapeamentos não possuem
comportamento;
 Os comportamento são
implementados nos steps;
 Podemos reusar comportamentos
para vários objetos e vice-e-versa;
 Melhor manutenção, devido a
redução de código.
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

ExemploExemplo
@ScreenMap(name = "Tela de Busca", location = "http://www.google.com.br")
public class MyPage {
@ElementMap(
name = "Campo de Busca",
locatorType = ElementLocatorType.Id,
locator = "gbqfq")
private TextField searchField;
@ElementMap(
name = "Estou com sorte",
locatorType = ElementLocatorType.Id,
locator = "gbqfbb")
private Button buttonLuckSearch;
}
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

@ScreenMap@ScreenMap
@ScreenMap(
name = "Tela de Busca",
location = "http://www.google.com.br")
Identificação amigável
da tela
Identificação amigável
da tela
Localização da telaLocalização da tela
@ScreenMap(
name = "Tela de Busca",
base="http://www.google.com.br",
location = "/")
Atributo opcional que define o prefixo
do localizador. Importante quando deseja-se
parametrizar os localizadores
Atributo opcional que define o prefixo
do localizador. Importante quando deseja-se
parametrizar os localizadores
Neste caso a localização da tela
É a concatenação da base + location
Neste caso a localização da tela
É a concatenação da base + location
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

@ElementMap@ElementMap
@ElementMap(
name = "Campo de Busca",
locatorType = ElementLocatorType.Id,
locator = "gbqfq")
Identificação amigável
do elemento de tela
Identificação amigável
do elemento de tela
Tipo de localizador:
ClassName; CssSelector
Id; LinkText; Name;
TagName; XPath
Tipo de localizador:
ClassName; CssSelector
Id; LinkText; Name;
TagName; XPathValor de LocalizadorValor de Localizador
@ElementMap(
name = "Menu Superior",
locatorType = ElementLocatorType.Id,
locator = { "gbztm", "gbmm" })
private Select menuLivros;
Pode ser necessário
Mais de um localizador
Pode ser necessário
Mais de um localizador
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Interface ElementInterface Element
 Especificação que provê abstrações para elementos de tela:
 Button.java
 CheckBox.java
 Grid.java
 Label.java
 Link.java
 ListBox.java
 Loading.java
 Menu.java
 MenuItem.java
 PickList.java
 Radio.java
 Screen.java
 Select.java
 TextField.java
@ElementMap(
name = "Pesquisar",
locatorType = ElementLocatorType.Id,
locator = "gbqfb")
private Button botaoPesquiar
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Interface ElementInterface Element
 Cada projeto do tipo Runner deve implementar estas
especificações
public class WebButton extends
WebBase implements Button {
public void click() {
waitElement(0);
getElements().get(0).click();
}
}
public class WebButton extends
WebBase implements Button {
public void click() {
waitElement(0);
getElements().get(0).click();
}
}
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Design DBehave - CompositeDesign DBehave - Composite
 O design Page Object equivale ao refatoramento do
 Vantagens:
 Reuso de comportamentos;
 Polimorfismo para tipos de telas (Web, Desktop, Mobile, ...)
Dados
ScreeMapScreeMap
Comportamento
ElementElement+ =
Dados com
Comportamento
Page ObjectPage Object
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Integração BDDIntegração BDD
 O DBehave implementa passos comunspassos comuns para interação com
aplicações Web
Cenário: Procurando uma Alma Gemea
Dado que vou para a página "Alma Gemea"
Quando clico em "Pesquisar"
Quando informo "36" no campo "idade"
Quando seleciono a opção "Solteiro"
Então será exibido na "Caixa ao lado" o valor "Você está com sorte"
Dado que estou na página "Buscar Alma Gemea"
Quando clico em "Procurar"
Então será exibido "Ricardão"
Vai para a tela
mapeada
Vai para a tela
mapeada
Execute a operação
de click
Execute a operação
de click
Informa o valor
de um campo de edição
Informa o valor
de um campo de edição
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Integração BDDIntegração BDD
 O DBehave implementa passos comunspassos comuns para interação com
aplicações Web
Cenário: Procurando uma Alma Gemea
Dado que vou para a página "Alma Gemea"
Quando clico em "Pesquisar"
Quando informo "36" no campo "idade"
Quando seleciono a opção "Solteiro"
Então será exibido na "Caixa ao lado" o valor "Você está com sorte"
Dado que estou na página "Buscar Alma Gemea"
Quando clico em "Procurar"
Então será exibido "Ricardão"
Selecione um campo de
escolha (radio, check ou link)
Selecione um campo de
escolha (radio, check ou link)
Verifica se um elemento
Possui um determinado valor
Verifica se um elemento
Possui um determinado valor
Verifica se um elemento
Possui um determinado valor
Verifica se um elemento
Possui um determinado valor
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Integração BDDIntegração BDD
 O DBehave implementa passos comunspassos comuns para interação com
aplicações Web
Cenário: Procurando uma Alma Gemea
Dado que vou para a página "Alma Gemea"
Quando clico em "Pesquisar"
Quando informo "36" no campo "idade"
Quando seleciono a opção "Solteiro"
Então será exibido na "Caixa ao lado" o valor "Você está com sorte"
Dado que estou na página "Buscar Alma Gemea"
Quando clico em "Procurar"
Então será exibido "Ricardão"
Selecione um campo de
escolha (radio, check ou link)
Selecione um campo de
escolha (radio, check ou link)
Informa qual a página
Atual sem executar ação
de navegação
Informa qual a página
Atual sem executar ação
de navegação
Verifica em toda a tela
a presença e um texto
Verifica em toda a tela
a presença e um texto
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Integração BDDIntegração BDD
Funcionalidade: Acesso
Como um: visitante
Eu quero: acessar o Google
De modo que: a página inicial apareça para mim
Cenário: Acesso ao Google
Dado que vou para a página "Tela de Busca"
Então será exibido "Google"
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Integração BDDIntegração BDD
 Inclua na classe MyPage o botão de pesquisa:
Cenário: Utilização da funcionalidade de pesquisa
Dado que vou para a página "Tela de Busca"
Quando informo "Demoiselle Behave" no campo "Campo de Busca"
Quando clico em "Pesquisar"
Então será exibido "Demoiselle Behave"
@ElementMap( name = "Pesquisar", locatorType =
ElementLocatorType.Id, locator = "gbqfb")
private Button botaoPesquisar;
Demoiselle BehaveDemoiselle Behave
NecessidadeNecessidade
Especificação FormalEspecificação Formal Especificação FormalEspecificação Formal
Funcionalidade: Acessa ao Sistema
Cenário: Acessa sistema com usuário válido
Dado que vou para a página "Tela de Login"
Quando informo "joao" no campo "Usuário"
E informo "123" no campo "Campo Senha"
Quando clico em "Entrar"
Então estou autenticado
Especificação TestávelEspecificação Testável
representa
WebDriver driver = new FirefoxDriver();
driver.get("http://localhost:8080/treino/");
WebElement login =
driver.findElement(By.xpath("(//input[contai
ns(@id, 'formLogin')][contains(@type,
'text')])"));
login.clear();
login.sendKeys("joao");
WebElement senha =
driver.findElement(By.xpath("(//input[contai
ns(@id, 'formLogin')][contains(@type,
'password')])"));
senha.sendKeys("123");
WebElement botaoOk =
driver.findElement(By.xpath("(//button[conta
ins(@type, 'submit')])"));
botaoOk.click();
Linguagem de ProgramaçãoLinguagem de Programação
representa
Demoiselle BehaveDemoiselle Behave
WebDriver driver = new FirefoxDriver();
driver.get("http://localhost:8080/treino/");
WebElement login =
driver.findElement(By.xpath("(//input[contai
ns(@id, 'formLogin')][contains(@type,
'text')])"));
login.click();
login.clear();
login.sendKeys("joao");
WebElement senha =
driver.findElement(By.xpath("(//input[contai
ns(@id, 'formLogin')][contains(@type,
'password')])"));
senha.clear();
senha.sendKeys("123");
WebElement botaoOk =
driver.findElement(By.xpath("(//button[conta
ins(@type, 'submit')])"));
botaoOk.click();
Funcionalidade: Acessa ao Sistema
Cenário: Acessa sistema com usuário válido
Dado que vou para a página "Tela de Login"
Quando informo "joao" no campo "Usuário"
E informo "123" no campo "Campo Senha"
Quando clico em "Entrar"
Então estou autenticado
HojeHoje – Redução de Custo– Redução de Custo
ManutençãoManutenção
AprendizagemAprendizagem
ProdutividadeProdutividade
BenefíciosBenefícios
Demoiselle BehaveDemoiselle Behave
WebDriver driver = new FirefoxDriver();
driver.get("http://localhost:8080/treino/");
WebElement login =
driver.findElement(By.xpath("(//input[contai
ns(@id, 'formLogin')][contains(@type,
'text')])"));
login.click();
login.clear();
login.sendKeys("joao");
WebElement senha =
driver.findElement(By.xpath("(//input[contai
ns(@id, 'formLogin')][contains(@type,
'password')])"));
senha.clear();
senha.sendKeys("123");
WebElement botaoOk =
driver.findElement(By.xpath("(//button[conta
ins(@type, 'submit')])"));
botaoOk.click();
Funcionalidade: Acessa ao Sistema
Cenário: Acessa sistema com usuário válido
Dado que vou para a página "Tela de Login"
Quando informo "joao" no campo "Usuário"
E informo "123" no campo "Campo Senha"
Quando clico em "Entrar"
Então estou autenticado
FuturoFuturo – Colaboração– Colaboração
BenefíciosBenefícios
Demoiselle BehaveDemoiselle Behave
IntroduçãoIntrodução

Demoiselle BehaveDemoiselle Behave
 O que é?
 É um framework de integração de ferramentas para uso de técnicas de
Desenvolvimento Orientada a Comportamento - Behaviour-Driven
Development (BDD).
 Além de uma ferramenta BDD:
 Abstração de ferramentas BDD
 Abstração de ferramentas de automação de testes
 Abstração de ferramentas de gestão de testes
 É um subprojeto do Framework Demoiselle
(http://www.frameworkdemoiselle.gov.br/)
Demoiselle BehaveDemoiselle Behave
IntroduçãoIntrodução

Visão GeralVisão Geral
Teste um sistemaTeste um sistema
Behave
Selecione um DriverSelecione um Driver
Execute seus testesExecute seus testes
EscrevaEscreva estóriasestórias
Mapei telasMapei telas
Registre seus resultadosRegistre seus resultados
Escolha uma ferramentaEscolha uma ferramenta
(1)(1)
(2)(2)
(3)(3)
(4)(4)
(5)(5)
Demoiselle BehaveDemoiselle Behave
DemonstraçãoDemonstração
Demoiselle BehaveDemoiselle Behave
Fim de História!Fim de História!
Mais Informações:Mais Informações:
https://github.com/demoiselle/behavehttps://github.com/demoiselle/behave

Mais conteúdo relacionado

Destaque

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Destaque (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Demoiselle Behave

  • 1. Automação de Testes de Software com:Automação de Testes de Software com: DemoiselleDemoiselle BehaveBehave Julian Cesar dos SantosJulian Cesar dos Santos Vanderson Botêlho da SilvaVanderson Botêlho da Silva
  • 2. Demoiselle BehaveDemoiselle Behave BDD - Behavior Driven DevelopmentBDD - Behavior Driven Development UmaUma técnica de desenvolvimento ágiltécnica de desenvolvimento ágil criado porcriado por Dan NorthDan North que integra regras de negócio comque integra regras de negócio com automação de testes.automação de testes. EvoluçãoEvolução do TDD:do TDD: PorPor onde começaonde começa o processo?o processo? O queO que testar e o que não testar?testar e o que não testar? O queO que chamamoschamamos de teste?de teste? ComoComo analisar falhasanalisar falhas??
  • 4. Demoiselle BehaveDemoiselle Behave MotivaçãoMotivação  Especificação de ComportamentoEspecificação de Comportamento  Um dos grandes problemas na construção de um software é não entender exatamente o que ele deve fazer
  • 5. Demoiselle BehaveDemoiselle Behave MotivaçãoMotivação UseUse histórias concretashistórias concretas para ilustrar o que separa ilustrar o que se deseja do softwaredeseja do software
  • 6. Demoiselle BehaveDemoiselle Behave MotivaçãoMotivação Cenários de uso são maisCenários de uso são mais eficienteseficientes na comunicaçãona comunicação do que descrições.do que descrições.
  • 7. Demoiselle BehaveDemoiselle Behave MotivaçãoMotivação Exemplos reaisExemplos reais nosnos mantêm conectadosmantêm conectados com a visão dos nossoscom a visão dos nossos stakeholdersstakeholders
  • 9. Demoiselle BehaveDemoiselle Behave FuncionamentoFuncionamento Funcionalidade: Operar a Calculadora Narrativa: Para obter as operações básicas da calculadora Como um usuário qualquer Desejo resolver problemas matemáticos de forma mais rápida Cenário: Somar Dado que inicio a Calculadora Quando adiciono "5" E adiciono "7" Então seu valor será "12" Escreva suas histórias
  • 10. Demoiselle BehaveDemoiselle Behave FuncionamentoFuncionamento Cenário: Somar Dado que inicio a Calculadora Quando adiciono "5" E adiciono "7" Então seu valor será "12" @When("Quando inicio a Calculadora") public void goToWithName(String local) { } @When("adiciono "$valor"") public void whenAdiciono(double valor) { } @Then("seu valor será "$valor"") public void thenSeuValorSera(double valor) { } Suas frases devem ser mapeadas em métodos
  • 11. Demoiselle BehaveDemoiselle Behave Mapeamento de TelaMapeamento de Tela  ObjetivoObjetivo  Para testes sob interfaces gráficas o mapeamento de tela visa desacoplar os elementos de tela ao script de automação.  BenefíciosBenefícios  Evita duplicação de código;  Maior manutenibilidade: se houver mudanças na tela a correção deverá ser aplicada em um único lugar.
  • 12. Demoiselle BehaveDemoiselle Behave Mapeamento de TelaMapeamento de Tela  Diferenças para um Page ObjectDiferenças para um Page Object  Os mapeamentos não possuem comportamento;  Os comportamento são implementados nos steps;  Podemos reusar comportamentos para vários objetos e vice-e-versa;  Melhor manutenção, devido a redução de código.
  • 13. Demoiselle BehaveDemoiselle Behave Mapeamento de TelaMapeamento de Tela  ExemploExemplo @ScreenMap(name = "Tela de Busca", location = "http://www.google.com.br") public class MyPage { @ElementMap( name = "Campo de Busca", locatorType = ElementLocatorType.Id, locator = "gbqfq") private TextField searchField; @ElementMap( name = "Estou com sorte", locatorType = ElementLocatorType.Id, locator = "gbqfbb") private Button buttonLuckSearch; }
  • 14. Demoiselle BehaveDemoiselle Behave Mapeamento de TelaMapeamento de Tela  @ScreenMap@ScreenMap @ScreenMap( name = "Tela de Busca", location = "http://www.google.com.br") Identificação amigável da tela Identificação amigável da tela Localização da telaLocalização da tela @ScreenMap( name = "Tela de Busca", base="http://www.google.com.br", location = "/") Atributo opcional que define o prefixo do localizador. Importante quando deseja-se parametrizar os localizadores Atributo opcional que define o prefixo do localizador. Importante quando deseja-se parametrizar os localizadores Neste caso a localização da tela É a concatenação da base + location Neste caso a localização da tela É a concatenação da base + location
  • 15. Demoiselle BehaveDemoiselle Behave Mapeamento de TelaMapeamento de Tela  @ElementMap@ElementMap @ElementMap( name = "Campo de Busca", locatorType = ElementLocatorType.Id, locator = "gbqfq") Identificação amigável do elemento de tela Identificação amigável do elemento de tela Tipo de localizador: ClassName; CssSelector Id; LinkText; Name; TagName; XPath Tipo de localizador: ClassName; CssSelector Id; LinkText; Name; TagName; XPathValor de LocalizadorValor de Localizador @ElementMap( name = "Menu Superior", locatorType = ElementLocatorType.Id, locator = { "gbztm", "gbmm" }) private Select menuLivros; Pode ser necessário Mais de um localizador Pode ser necessário Mais de um localizador
  • 16. Demoiselle BehaveDemoiselle Behave Mapeamento de TelaMapeamento de Tela  Interface ElementInterface Element  Especificação que provê abstrações para elementos de tela:  Button.java  CheckBox.java  Grid.java  Label.java  Link.java  ListBox.java  Loading.java  Menu.java  MenuItem.java  PickList.java  Radio.java  Screen.java  Select.java  TextField.java @ElementMap( name = "Pesquisar", locatorType = ElementLocatorType.Id, locator = "gbqfb") private Button botaoPesquiar
  • 17. Demoiselle BehaveDemoiselle Behave Mapeamento de TelaMapeamento de Tela  Interface ElementInterface Element  Cada projeto do tipo Runner deve implementar estas especificações public class WebButton extends WebBase implements Button { public void click() { waitElement(0); getElements().get(0).click(); } } public class WebButton extends WebBase implements Button { public void click() { waitElement(0); getElements().get(0).click(); } }
  • 18. Demoiselle BehaveDemoiselle Behave Mapeamento de TelaMapeamento de Tela  Design DBehave - CompositeDesign DBehave - Composite  O design Page Object equivale ao refatoramento do  Vantagens:  Reuso de comportamentos;  Polimorfismo para tipos de telas (Web, Desktop, Mobile, ...) Dados ScreeMapScreeMap Comportamento ElementElement+ = Dados com Comportamento Page ObjectPage Object
  • 19. Demoiselle BehaveDemoiselle Behave Mapeamento de TelaMapeamento de Tela  Integração BDDIntegração BDD  O DBehave implementa passos comunspassos comuns para interação com aplicações Web Cenário: Procurando uma Alma Gemea Dado que vou para a página "Alma Gemea" Quando clico em "Pesquisar" Quando informo "36" no campo "idade" Quando seleciono a opção "Solteiro" Então será exibido na "Caixa ao lado" o valor "Você está com sorte" Dado que estou na página "Buscar Alma Gemea" Quando clico em "Procurar" Então será exibido "Ricardão" Vai para a tela mapeada Vai para a tela mapeada Execute a operação de click Execute a operação de click Informa o valor de um campo de edição Informa o valor de um campo de edição
  • 20. Demoiselle BehaveDemoiselle Behave Mapeamento de TelaMapeamento de Tela  Integração BDDIntegração BDD  O DBehave implementa passos comunspassos comuns para interação com aplicações Web Cenário: Procurando uma Alma Gemea Dado que vou para a página "Alma Gemea" Quando clico em "Pesquisar" Quando informo "36" no campo "idade" Quando seleciono a opção "Solteiro" Então será exibido na "Caixa ao lado" o valor "Você está com sorte" Dado que estou na página "Buscar Alma Gemea" Quando clico em "Procurar" Então será exibido "Ricardão" Selecione um campo de escolha (radio, check ou link) Selecione um campo de escolha (radio, check ou link) Verifica se um elemento Possui um determinado valor Verifica se um elemento Possui um determinado valor Verifica se um elemento Possui um determinado valor Verifica se um elemento Possui um determinado valor
  • 21. Demoiselle BehaveDemoiselle Behave Mapeamento de TelaMapeamento de Tela  Integração BDDIntegração BDD  O DBehave implementa passos comunspassos comuns para interação com aplicações Web Cenário: Procurando uma Alma Gemea Dado que vou para a página "Alma Gemea" Quando clico em "Pesquisar" Quando informo "36" no campo "idade" Quando seleciono a opção "Solteiro" Então será exibido na "Caixa ao lado" o valor "Você está com sorte" Dado que estou na página "Buscar Alma Gemea" Quando clico em "Procurar" Então será exibido "Ricardão" Selecione um campo de escolha (radio, check ou link) Selecione um campo de escolha (radio, check ou link) Informa qual a página Atual sem executar ação de navegação Informa qual a página Atual sem executar ação de navegação Verifica em toda a tela a presença e um texto Verifica em toda a tela a presença e um texto
  • 22. Demoiselle BehaveDemoiselle Behave Mapeamento de TelaMapeamento de Tela  Integração BDDIntegração BDD Funcionalidade: Acesso Como um: visitante Eu quero: acessar o Google De modo que: a página inicial apareça para mim Cenário: Acesso ao Google Dado que vou para a página "Tela de Busca" Então será exibido "Google"
  • 23. Demoiselle BehaveDemoiselle Behave Mapeamento de TelaMapeamento de Tela  Integração BDDIntegração BDD  Inclua na classe MyPage o botão de pesquisa: Cenário: Utilização da funcionalidade de pesquisa Dado que vou para a página "Tela de Busca" Quando informo "Demoiselle Behave" no campo "Campo de Busca" Quando clico em "Pesquisar" Então será exibido "Demoiselle Behave" @ElementMap( name = "Pesquisar", locatorType = ElementLocatorType.Id, locator = "gbqfb") private Button botaoPesquisar;
  • 24. Demoiselle BehaveDemoiselle Behave NecessidadeNecessidade Especificação FormalEspecificação Formal Especificação FormalEspecificação Formal Funcionalidade: Acessa ao Sistema Cenário: Acessa sistema com usuário válido Dado que vou para a página "Tela de Login" Quando informo "joao" no campo "Usuário" E informo "123" no campo "Campo Senha" Quando clico em "Entrar" Então estou autenticado Especificação TestávelEspecificação Testável representa WebDriver driver = new FirefoxDriver(); driver.get("http://localhost:8080/treino/"); WebElement login = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'text')])")); login.clear(); login.sendKeys("joao"); WebElement senha = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'password')])")); senha.sendKeys("123"); WebElement botaoOk = driver.findElement(By.xpath("(//button[conta ins(@type, 'submit')])")); botaoOk.click(); Linguagem de ProgramaçãoLinguagem de Programação representa
  • 25. Demoiselle BehaveDemoiselle Behave WebDriver driver = new FirefoxDriver(); driver.get("http://localhost:8080/treino/"); WebElement login = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'text')])")); login.click(); login.clear(); login.sendKeys("joao"); WebElement senha = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'password')])")); senha.clear(); senha.sendKeys("123"); WebElement botaoOk = driver.findElement(By.xpath("(//button[conta ins(@type, 'submit')])")); botaoOk.click(); Funcionalidade: Acessa ao Sistema Cenário: Acessa sistema com usuário válido Dado que vou para a página "Tela de Login" Quando informo "joao" no campo "Usuário" E informo "123" no campo "Campo Senha" Quando clico em "Entrar" Então estou autenticado HojeHoje – Redução de Custo– Redução de Custo ManutençãoManutenção AprendizagemAprendizagem ProdutividadeProdutividade BenefíciosBenefícios
  • 26. Demoiselle BehaveDemoiselle Behave WebDriver driver = new FirefoxDriver(); driver.get("http://localhost:8080/treino/"); WebElement login = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'text')])")); login.click(); login.clear(); login.sendKeys("joao"); WebElement senha = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'password')])")); senha.clear(); senha.sendKeys("123"); WebElement botaoOk = driver.findElement(By.xpath("(//button[conta ins(@type, 'submit')])")); botaoOk.click(); Funcionalidade: Acessa ao Sistema Cenário: Acessa sistema com usuário válido Dado que vou para a página "Tela de Login" Quando informo "joao" no campo "Usuário" E informo "123" no campo "Campo Senha" Quando clico em "Entrar" Então estou autenticado FuturoFuturo – Colaboração– Colaboração BenefíciosBenefícios
  • 27. Demoiselle BehaveDemoiselle Behave IntroduçãoIntrodução  Demoiselle BehaveDemoiselle Behave  O que é?  É um framework de integração de ferramentas para uso de técnicas de Desenvolvimento Orientada a Comportamento - Behaviour-Driven Development (BDD).  Além de uma ferramenta BDD:  Abstração de ferramentas BDD  Abstração de ferramentas de automação de testes  Abstração de ferramentas de gestão de testes  É um subprojeto do Framework Demoiselle (http://www.frameworkdemoiselle.gov.br/)
  • 28. Demoiselle BehaveDemoiselle Behave IntroduçãoIntrodução  Visão GeralVisão Geral Teste um sistemaTeste um sistema Behave Selecione um DriverSelecione um Driver Execute seus testesExecute seus testes EscrevaEscreva estóriasestórias Mapei telasMapei telas Registre seus resultadosRegistre seus resultados Escolha uma ferramentaEscolha uma ferramenta (1)(1) (2)(2) (3)(3) (4)(4) (5)(5)
  • 30. Demoiselle BehaveDemoiselle Behave Fim de História!Fim de História! Mais Informações:Mais Informações: https://github.com/demoiselle/behavehttps://github.com/demoiselle/behave