O documento discute a automação de testes de software usando Demoiselle Behave. Apresenta os conceitos de BDD e como ele integra regras de negócio com testes automatizados. Também explica como o Demoiselle Behave funciona na prática através de mapeamento de telas, cenários e passos para interagir com aplicações web.
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??
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