Automação de Testes de Software com:Automação de Testes de Software com:
DemoiselleDemoiselle BehaveBehave
Julian Cesar dos SantosJulian Cesar dos SantosVanderson Botêlho da SilvaVanderson Botêlho da Silva
Demoiselle BehaveDemoiselle Behave
BDD - Behavior Driven DevelopmentBDD - Behavior Driven Development
Uma Uma técnica de desenvolvimento ágiltécnica de desenvolvimento ágil criado por criado por Dan NorthDan North que integra regras de negócio com que integra regras de negócio com automação de testes.automação de testes.
EvoluçãoEvolução do TDD: do TDD:
Por Por 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 que O que chamamoschamamos de teste? de teste?
Como Como 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
Use Use histórias concretashistórias concretaspara 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 mais Cenários de uso são mais eficienteseficientesna comunicaçãona comunicação do que descrições. do que descrições.
Demoiselle BehaveDemoiselle Behave
MotivaçãoMotivação
Exemplos reais Exemplos reais nos nos mantêm conectadosmantêm conectados
com a visão dos nossoscom a visão dos nossosstakeholdersstakeholders
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 calculadoraComo um usuário qualquerDesejo resolver problemas matemáticos de forma mais rápida
Cenário: Somar
Dado que inicio a CalculadoraQuando 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 CalculadoraQuando 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 sermapeadas 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ávelda tela
Identificação amigávelda 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 prefixodo localizador. Importante quando deseja-se
parametrizar os localizadores
Atributo opcional que define o prefixodo localizador. Importante quando deseja-se
parametrizar os localizadoresNeste 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áveldo elemento de tela
Identificação amigáveldo 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árioMais de um localizador
Pode ser necessárioMais 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 - Composite Design DBehave - Composite
O design Page Object equivale ao refatoramento do
Vantagens: Reuso de comportamentos; Polimorfismo para tipos de telas (Web, Desktop, Mobile, ...)
Dados
ScreeMapScreeMapComportamento
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 telamapeada
Vai para a telamapeada
Execute a operaçãode click
Execute a operaçãode click
Informa o valorde um campo de edição
Informa o valorde 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 elementoPossui um determinado valor
Verifica se um elementoPossui um determinado valor
Verifica se um elementoPossui um determinado valor
Verifica se um elementoPossui 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áginaAtual sem executar ação
de navegação
Informa qual a páginaAtual sem executar ação
de navegaçãoVerifica em toda a telaa presença e um texto
Verifica em toda a telaa presença e um texto
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela Integração BDDIntegração BDD
Funcionalidade: Acesso
Como um: visitanteEu quero: acessar o GoogleDe 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 pesquisaDado 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[contains(@id, 'formLogin')][contains(@type, 'text')])"));login.clear();login.sendKeys("joao");WebElement senha = driver.findElement(By.xpath("(//input[contains(@id, 'formLogin')][contains(@type, 'password')])"));senha.sendKeys("123");WebElement botaoOk = driver.findElement(By.xpath("(//button[contains(@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[contains(@id, 'formLogin')][contains(@type, 'text')])"));login.click();login.clear();login.sendKeys("joao");WebElement senha = driver.findElement(By.xpath("(//input[contains(@id, 'formLogin')][contains(@type, 'password')])"));senha.clear();senha.sendKeys("123");WebElement botaoOk = driver.findElement(By.xpath("(//button[contains(@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 CustoManutençã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[contains(@id, 'formLogin')][contains(@type, 'text')])"));login.click();login.clear();login.sendKeys("joao");WebElement senha = driver.findElement(By.xpath("(//input[contains(@id, 'formLogin')][contains(@type, 'password')])"));senha.clear();senha.sendKeys("123");WebElement botaoOk = driver.findElement(By.xpath("(//button[contains(@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
BehaveSelecione 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
Top Related