Automação de Testes de Software com:Automação de Testes de Software com:
DemoiselleDemoiselle BehaveBehave
Julian Cesar do...
Demoiselle BehaveDemoiselle Behave
BDD - Behavior Driven DevelopmentBDD - Behavior Driven Development
UmaUma técnica de de...
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 ...
Demoiselle BehaveDemoiselle Behave
MotivaçãoMotivação
UseUse histórias concretashistórias concretas
para ilustrar o que se...
Demoiselle BehaveDemoiselle Behave
MotivaçãoMotivação
Cenários de uso são maisCenários de uso são mais eficienteseficiente...
Demoiselle BehaveDemoiselle Behave
MotivaçãoMotivação
Exemplos reaisExemplos reais
nosnos mantêm conectadosmantêm conectad...
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 a...
Demoiselle BehaveDemoiselle Behave
FuncionamentoFuncionamento
Cenário: Somar
Dado que inicio a Calculadora
Quando adiciono...
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

ObjetivoObjetivo
 Para testes sob interfaces gr...
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Diferenças para um Page ObjectDiferenças para um...
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

ExemploExemplo
@ScreenMap(name = "Tela de Busca"...
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

@ScreenMap@ScreenMap
@ScreenMap(
name = "Tela de...
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

@ElementMap@ElementMap
@ElementMap(
name = "Camp...
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Interface ElementInterface Element
 Especificaç...
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Interface ElementInterface Element
 Cada projet...
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Design DBehave - CompositeDesign DBehave - Compo...
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Integração BDDIntegração BDD
 O DBehave impleme...
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Integração BDDIntegração BDD
 O DBehave impleme...
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Integração BDDIntegração BDD
 O DBehave impleme...
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Integração BDDIntegração BDD
Funcionalidade: Ace...
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Integração BDDIntegração BDD
 Inclua na classe ...
Demoiselle BehaveDemoiselle Behave
NecessidadeNecessidade
Especificação FormalEspecificação Formal Especificação FormalEsp...
Demoiselle BehaveDemoiselle Behave
WebDriver driver = new FirefoxDriver();
driver.get("http://localhost:8080/treino/");
We...
Demoiselle BehaveDemoiselle Behave
WebDriver driver = new FirefoxDriver();
driver.get("http://localhost:8080/treino/");
We...
Demoiselle BehaveDemoiselle Behave
IntroduçãoIntrodução

Demoiselle BehaveDemoiselle Behave
 O que é?
 É um framework d...
Demoiselle BehaveDemoiselle Behave
IntroduçãoIntrodução

Visão GeralVisão Geral
Teste um sistemaTeste um sistema
Behave
S...
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/...
Upcoming SlideShare
Loading in …5
×

Demoiselle Behave

298 views
227 views

Published on

Apresentação do projeto Demoiselle Behave (https://github.com/demoiselle/behave)

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
298
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Demoiselle Behave

  1. 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. 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??
  3. 3. Demoiselle BehaveDemoiselle Behave MotivaçãoMotivação Porque usar BDD?Porque usar BDD?
  4. 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. 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. 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. 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
  8. 8. Demoiselle BehaveDemoiselle Behave MotivaçãoMotivação Como isso Funciona na Práticana Prática
  9. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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)
  29. 29. Demoiselle BehaveDemoiselle Behave DemonstraçãoDemonstração
  30. 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

×