Demoiselle Behave

30
Automação de Testes de Software com: Automação de Testes de Software com: Demoiselle Demoiselle Behave Behave Julian Cesar dos Santos Julian Cesar dos Santos Vanderson Botêlho da Silva Vanderson Botêlho da Silva

description

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

Transcript of Demoiselle Behave

Page 1: Demoiselle Behave

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

Page 2: Demoiselle Behave

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??

Page 3: Demoiselle Behave

Demoiselle BehaveDemoiselle Behave

MotivaçãoMotivação

Porque usar BDD?Porque usar BDD?

Page 4: Demoiselle Behave

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

Page 5: Demoiselle Behave

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

Page 6: Demoiselle Behave

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.

Page 7: Demoiselle Behave

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

Page 8: Demoiselle Behave

Demoiselle BehaveDemoiselle Behave

MotivaçãoMotivação

Como isso Funciona na Práticana Prática

Page 9: Demoiselle Behave

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

Page 10: Demoiselle Behave

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

Page 11: Demoiselle Behave

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.

Page 12: Demoiselle Behave

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.

Page 13: Demoiselle Behave

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;

}

Page 14: Demoiselle Behave

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

Page 15: Demoiselle Behave

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

Page 16: Demoiselle Behave

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

Page 17: Demoiselle Behave

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();

}}

Page 18: Demoiselle Behave

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

Page 19: Demoiselle Behave

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

Page 20: Demoiselle Behave

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

Page 21: Demoiselle Behave

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

Page 22: Demoiselle Behave

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"

Page 23: Demoiselle Behave

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;

Page 24: Demoiselle Behave

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

Page 25: Demoiselle Behave

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

Page 26: Demoiselle Behave

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

Page 27: Demoiselle Behave

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/)

Page 28: Demoiselle Behave

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)

Page 29: Demoiselle Behave

Demoiselle BehaveDemoiselle Behave

DemonstraçãoDemonstração

Page 30: Demoiselle Behave

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