SlideShare uma empresa Scribd logo
Behavior Driven
Development
Na prática: Cucumber + Selenium + Java
Agenda
•   Objetivos
•   Conceitos
         Processo tradicional (Sem BDD)
         Problemas do processo tradicional
    Motivos e história
    Alternativa: BDD
    Conhecendo BDD
    Comparação - BDD vs tradicional
    Obstáculos para adoção de BDD
•   Prática
    Ferramentas utilizadas
    cucumber-jvm
    Estudo de caso 1: Teste unitário (Oi mundo)
    Selenium
    Estudo de caso 2: busca de projeto no github com Selenium
Objetivos
•   Apresentar BDD e comparativo com modelo tradicional
    de desenvolvimento


•   Apresentar CUCUMBER como framework para BDD


•   Como Cucumber-jvm pode ser usado para implementar
    BDD com Java


•   Testes de ponta-a-ponta com Selenium
Conceitos - Processo
tradicional (sem BDD)
Modelo em cascata
Conceitos - Processo
tradicional (sem BDD)
Modelo RUP
Conceitos - Processo
tradicional (sem BDD)
•   Formalização de escopo com usuário chave por meio
    de especificações funcionais e técnicas


•   Qualidade é garantida com testes manuais


•   Casos de teste criados a partir de especificações
    funcionais e técnicas


•   Desenvolvedor faz teste unitário antes do caso de teste
    estar pronto
Conceitos - Problemas do
processo tradicional
•   Gasta-se esforço para criar especificação funcional e
    mais esforço para criar casos de teste


•   Desenvolvedores normalmente não conhecem tanto o
    negócio, há uma barreira com o usuário


•   Especificação normalmente insuficiente - usuário
    sempre esquece alguma coisa


•   Foco em padronização e não no que agrega valor para
    o negócio
Conceitos - Motivos e
História
•   Fábrica de Software - modelo proveniente da primeira
    revolução industrial - Fordismo, padronização de
    saídas, padronização de processos de trabalho


•   Software - um é diferente do outro - trabalho braçal feito
    pelo compilador


•   Programa = especificação


•   Necessidade de documentação: formalização com o
    usuário
Conceitos - Alternativa:
BDD
•   BDD = Behavior Driven Development


•   Se opõe ao modelo tradicional, seguindo conceitos de
    desenvolvimento ágil


•   Parte da premissa que cada software é diferente um do
    outro


•   Foco no que agrega valor ao negócio
Conceitos - Conhecendo
BDD
•   Modelo ágil de desenvolvimento de segunda geração, surgindo a partir do TDD (Test Driven
    Development) e do DDD (Domain Driven Design)



•   Criador do BDD: Dan North



•   Testes = Requisitos



•   Todos participam da definição dos cenários: usuário, analistas de negócio, testadores,
    desenvolvedores



•   Todos devem ter um entendimento comum sobre o que será desenvolvido



•   A definição deve ser direta e objetiva, tendo só o necessário
Conceitos - Conhecendo
BDD
•   Story: Account Holder withdraws cash
•
•   As an Account Holder
•   I want to withdraw cash from an ATM
•   So that I can get money when the bank is closed
•
•   Scenario 1: Account has sufficient funds
•   Given the account balance is $100
•   And the card is valid
•   And the machine contains enough money
•   When the Account Holder requests $20
•   Then the ATM should dispense $20
•   And the account balance should be $80
•   And the card should be returned
•
•   Scenario 2: Account has insufficient funds
•   Given the account balance is $10
•   And the card is valid
•   And the machine contains enough money
•   When the Account Holder requests $20
•   Then the ATM should not dispense any money
Conceitos - Conhecendo
BDD
•   Narrativa (estória):
     o Deve ter um título bem definido
     o Composta de cenários
     o Deve definir um papel, um feature e um benefício (“As a [role] I want
        [feature] so that [benefit]“ )
•   Componentes de um cenário:
     o Given - pré-condição do teste
     o When - Teste propriamente dito
     o Then - Resultado esperado



•   O que seriam condições de um caso de uso passam a ser cenários
    diferentes
Conceitos - Conhecendo
BDD
•   Exemplo de processo BDD
Conceitos - Comparação -
BDD vs tradicional
  Tradicional           BDD

    Gasto de          Gasto de
    esforço =         esforço =
  levantamento      levantamento
 de requisitos +    de cenários +
análise & design   desenvolviment
   + criação de           o
     testes +
 execução dos
     testes +
desenvolviment
         o

   Durante o       Maior facilidade
   projeto em      por todos para
  andamento,       enxergar o que
 normalmente            será
     alguém         desenvolvido
 esqueceu de
       algo
Conceitos - Obstáculos
para adoção de BDD
•   Cultura organizacional - quebra de paradigma -
    resistência por falta de conhecimento


•   Envolve mudanças na relação com o cliente / usuário
    chave


•   Elaboração de cenários errada pode levar a adoção ao
    fracasso


•   Nem todo teste é automatizável
Prática - Ferramentas
utilizadas
•   Cucumber JVM => BDD com Java


•   Selenium => Automatização de navegação WEB


•   JUnit ou ANT Task => Execução dos testes / geração
    de relatórios


•   Ferramentas específicas dependendo do teste.
    Exemplo: jaxws para testar webservices.
Prática - Ferramentas
utilizadas - Cucumber JVM
•  Cucumber = Framework para BDD originalmente
   desenvolvido para Ruby
•  URL: https://github.com/cucumber
Licença: MIT


•   Cucumber-JVM = versão java do Cucumber


•   O que faz:
    o Lê texto e acha o método java correspondente
    o Gera relatórios
    o Provê integração com JUnit/ANT
Prática - Estudo de caso
1: teste unitário
•     Queremos desenvolver um aplicativo "Oi mundo"
•     Temos o seguinte teste (helloworld.feature):

Feature: Oi mundo



 Scenario: Diga oi
  Given Minha saudacao e "Oi"
  When Eu executo minha aplicacao
  Then Ela deveria responder com "Oi mundo"
Prática - Estudo de caso
1: teste unitário
 •    Código inicial:



public class Hello {



      public Hello(String greeting) {



      }



      public String sayHi() {
            return "";
      }
Prática - Estudo de caso
1: teste unitário
 •      Automatização dos passos:
public class HelloStepdefs {
        private Hello hello;
        private String hi;




        @Given("^Minha saudacao e "([^"]*)"$")
        public void I_have_a_hello_app_with(String greeting) {
                 hello = new Hello(greeting);
        }




        @When("^Eu executo minha aplicacao$")
        public void I_ask_it_to_say_hi() {
                 hi = hello.sayHi();
        }




        @Then("^Ela deveria responder com "([^"]*)"$")
Prática - Estudo de caso
1: teste unitário
 •    Classe JUnit:

import cucumber.junit.Cucumber;
import org.junit.runner.RunWith;



@RunWith(Cucumber.class)
@Cucumber.Options(format = { "pretty", "html:target/cucumber-html-report" })
public class RunCukesTest {
}
Prática - Estudo de caso
1: teste unitário
•   Relatório inicial:
Prática - Estudo de caso
1: teste unitário
 •     Implementação do código:

package cucumber.examples.java.helloworld;



public class Hello {
  private final String greeting;



  public Hello(String greeting) {
      this.greeting = greeting;
  }



  public String sayHi() {
       return greeting + " mundo";
Prática - Estudo de caso
1: teste unitário
•   Relatório final:
Prática - Ferramentas
utilizadas - Selenium
•   Selenium = Framework Open Source Java para
    automatização de navegação internet a partir do java =
    correspondente java do rspec
•   URL: http://seleniumhq.org/
•   Diversas APIs e ferramentas associadas, tudo com
    licença Apache 2.0
•   Plugin para firefox que grava testes e exporta código
    java


•   O que faz:
    o Abre browser web
Prática - Estudo de caso
2: busca de projeto no
github
•    Temos o seguinte teste (github.feature):

Feature: Busca Github



 Scenario: Busca por usuario
  Given Eu estou no site "http://github.com"
  When Eu procuro por "cucumber"
  And Eu clico no link com descricao "cucumber"
  Then Eu deveria encontrar um link com descricao "cucumber-jvm"


 Scenario: Busca por projeto
  Given Eu estou no site "http://github.com"
  When Eu procuro por "cucumber"
  Then Eu deveria encontrar um link com descricao "cucumber / cucumber"
Prática - Estudo de caso
2: busca de projeto no
github
    •        Automatização:
public class GithubStepdefs {

             private WebDriver driver;

             @Given("^Eu estou no site "([^"]*)"$")

             public void eu_estou_no_site(String site) throws Exception {

                           driver = new FirefoxDriver();

                           driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

                           driver.get(site);

             }

             @When("^Eu procuro por "([^"]*)"$")

             public void eu_procuro_por (String searchText) throws Exception {

                           driver.findElement(By.name("q")).clear();

                           driver.findElement(By.name("q")).sendKeys(searchText + "n");

             }

             @When("^Eu clico no link com descricao "([^"]*)"$")

             public void eu_clico_no_link_com_descricao (String expectedLinkText) throws Exception {

                           driver.findElement(By.linkText(expectedLinkText)).click();

             }

             @Then("^Eu deveria encontrar um link com descricao "([^"]*)"$")

             public void eu_deveria_encontrar_um_link_com_descricao (String expectedLinkText) throws Exception {

                           Assert.assertNotNull(driver.findElement(By

                                          .linkText(expectedLinkText)));

                                          driver.quit();

             }

}
Prática - Estudo de caso
2: busca de projeto no
github
•   Execução:
Prática - Estudo de caso
2: busca de projeto no
github
•   Relatório:

Mais conteúdo relacionado

Mais procurados

SEMINARIO WEB EN VIVO: INTRODUCCIÓN AL AGILE TESTING
SEMINARIO WEB EN VIVO: INTRODUCCIÓN AL AGILE TESTINGSEMINARIO WEB EN VIVO: INTRODUCCIÓN AL AGILE TESTING
SEMINARIO WEB EN VIVO: INTRODUCCIÓN AL AGILE TESTING
tbaires
 
Postman Collection Format v2.0 (pre-draft)
Postman Collection Format v2.0 (pre-draft)Postman Collection Format v2.0 (pre-draft)
Postman Collection Format v2.0 (pre-draft)
Postman
 
Test plan presentation
Test plan presentationTest plan presentation
Test plan presentation
Peter Lebedevv
 
Shoaib Kamal Resume
Shoaib Kamal ResumeShoaib Kamal Resume
Shoaib Kamal Resume
ShoaibMallick
 
Introduction to BDD with Cucumber for Java
Introduction to BDD with Cucumber for JavaIntroduction to BDD with Cucumber for Java
Introduction to BDD with Cucumber for Java
Seb Rose
 
Manual Testing
Manual TestingManual Testing
Manual Testing
G.C Reddy
 
Bug metrics - o uso das métricas para apoiar a priorização dos Bugs de produção
Bug metrics - o uso das métricas para apoiar a priorização dos Bugs de produçãoBug metrics - o uso das métricas para apoiar a priorização dos Bugs de produção
Bug metrics - o uso das métricas para apoiar a priorização dos Bugs de produção
Joyce Bastos
 
Agile Testing Best Practices
Agile Testing Best PracticesAgile Testing Best Practices
Agile Testing Best Practices
Stephen Ritchie
 
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
uEngine Solutions
 
Cucumber BDD
Cucumber BDDCucumber BDD
Cucumber BDD
Pravin Dsilva
 
Bdd com cucumber + java + selenium
Bdd com cucumber + java + seleniumBdd com cucumber + java + selenium
Bdd com cucumber + java + selenium
Sandy Maciel
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
Sachithra Gayan
 
Sharath Resume
Sharath ResumeSharath Resume
Sharath Resume
Sharath Ns
 
TMMi Implementation Guideline
TMMi Implementation GuidelineTMMi Implementation Guideline
TMMi Implementation Guideline
STAG Software Private Limited
 
Getting started with Octopus Deploy
Getting started with Octopus DeployGetting started with Octopus Deploy
Getting started with Octopus Deploy
Karoline Klever
 
Software Testing Technique in Software Engineering
Software Testing Technique in Software EngineeringSoftware Testing Technique in Software Engineering
Software Testing Technique in Software Engineering
Ismail Hussain
 
Space Camp June 2022 - API First.pdf
Space Camp June 2022 - API First.pdfSpace Camp June 2022 - API First.pdf
Space Camp June 2022 - API First.pdf
Postman
 
Automation test framework with cucumber – BDD
Automation test framework with cucumber – BDDAutomation test framework with cucumber – BDD
Automation test framework with cucumber – BDD
123abcda
 
How To Write A Test Case In Software Testing | Edureka
How To Write A Test Case In Software Testing | EdurekaHow To Write A Test Case In Software Testing | Edureka
How To Write A Test Case In Software Testing | Edureka
Edureka!
 
Kotlin
KotlinKotlin

Mais procurados (20)

SEMINARIO WEB EN VIVO: INTRODUCCIÓN AL AGILE TESTING
SEMINARIO WEB EN VIVO: INTRODUCCIÓN AL AGILE TESTINGSEMINARIO WEB EN VIVO: INTRODUCCIÓN AL AGILE TESTING
SEMINARIO WEB EN VIVO: INTRODUCCIÓN AL AGILE TESTING
 
Postman Collection Format v2.0 (pre-draft)
Postman Collection Format v2.0 (pre-draft)Postman Collection Format v2.0 (pre-draft)
Postman Collection Format v2.0 (pre-draft)
 
Test plan presentation
Test plan presentationTest plan presentation
Test plan presentation
 
Shoaib Kamal Resume
Shoaib Kamal ResumeShoaib Kamal Resume
Shoaib Kamal Resume
 
Introduction to BDD with Cucumber for Java
Introduction to BDD with Cucumber for JavaIntroduction to BDD with Cucumber for Java
Introduction to BDD with Cucumber for Java
 
Manual Testing
Manual TestingManual Testing
Manual Testing
 
Bug metrics - o uso das métricas para apoiar a priorização dos Bugs de produção
Bug metrics - o uso das métricas para apoiar a priorização dos Bugs de produçãoBug metrics - o uso das métricas para apoiar a priorização dos Bugs de produção
Bug metrics - o uso das métricas para apoiar a priorização dos Bugs de produção
 
Agile Testing Best Practices
Agile Testing Best PracticesAgile Testing Best Practices
Agile Testing Best Practices
 
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
 
Cucumber BDD
Cucumber BDDCucumber BDD
Cucumber BDD
 
Bdd com cucumber + java + selenium
Bdd com cucumber + java + seleniumBdd com cucumber + java + selenium
Bdd com cucumber + java + selenium
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Sharath Resume
Sharath ResumeSharath Resume
Sharath Resume
 
TMMi Implementation Guideline
TMMi Implementation GuidelineTMMi Implementation Guideline
TMMi Implementation Guideline
 
Getting started with Octopus Deploy
Getting started with Octopus DeployGetting started with Octopus Deploy
Getting started with Octopus Deploy
 
Software Testing Technique in Software Engineering
Software Testing Technique in Software EngineeringSoftware Testing Technique in Software Engineering
Software Testing Technique in Software Engineering
 
Space Camp June 2022 - API First.pdf
Space Camp June 2022 - API First.pdfSpace Camp June 2022 - API First.pdf
Space Camp June 2022 - API First.pdf
 
Automation test framework with cucumber – BDD
Automation test framework with cucumber – BDDAutomation test framework with cucumber – BDD
Automation test framework with cucumber – BDD
 
How To Write A Test Case In Software Testing | Edureka
How To Write A Test Case In Software Testing | EdurekaHow To Write A Test Case In Software Testing | Edureka
How To Write A Test Case In Software Testing | Edureka
 
Kotlin
KotlinKotlin
Kotlin
 

Destaque

BDD com Cucumber
BDD com CucumberBDD com Cucumber
BDD com Cucumber
Eduardo Mendes
 
Jefferson Andrade - BDD - Behavior-Driven Development - ITA
Jefferson Andrade - BDD - Behavior-Driven Development - ITAJefferson Andrade - BDD - Behavior-Driven Development - ITA
Jefferson Andrade - BDD - Behavior-Driven Development - ITA
Jefferson Andrade
 
BDD & Cucumber
BDD & CucumberBDD & Cucumber
BDD & Cucumber
andersonleite
 
Gherkin
Gherkin   Gherkin
Gherkin
Ayrton Araújo
 
Integration Test Cucumber + Webrat + Selenium
Integration Test Cucumber + Webrat + SeleniumIntegration Test Cucumber + Webrat + Selenium
Integration Test Cucumber + Webrat + Selenium
tka
 
BDD on Java Concordion and Selenium
BDD on Java Concordion and SeleniumBDD on Java Concordion and Selenium
BDD on Java Concordion and Selenium
springbyexample
 
Testes In Browser Em Rails Com Capybara E Webdriver
Testes In Browser Em Rails Com Capybara E WebdriverTestes In Browser Em Rails Com Capybara E Webdriver
Testes In Browser Em Rails Com Capybara E Webdriver
Maurício Linhares
 
Aula 02 POO - Meu Primeiro Código
Aula 02 POO - Meu Primeiro CódigoAula 02 POO - Meu Primeiro Código
Aula 02 POO - Meu Primeiro Código
Aislan Rafael
 
Geek night-2015
Geek night-2015Geek night-2015
Geek night-2015
Taise Dias da Silva
 
Behaviour Driven Development
Behaviour Driven DevelopmentBehaviour Driven Development
Behaviour Driven Development
Maurício Linhares
 
BDD - aula
BDD - aulaBDD - aula
Embedded software, hardware design and automation software
Embedded software, hardware design and automation softwareEmbedded software, hardware design and automation software
Embedded software, hardware design and automation software
Paul Dao
 
Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08
André Phillip Bertoletti
 
Nasdanika WebTest - Modular functional testing of Web and Mobile Applications
Nasdanika WebTest - Modular functional testing of Web and Mobile ApplicationsNasdanika WebTest - Modular functional testing of Web and Mobile Applications
Nasdanika WebTest - Modular functional testing of Web and Mobile Applications
Pavel Vlasov
 
selenium-cucumber
selenium-cucumberselenium-cucumber
selenium-cucumber
Sameer Sawant
 
O que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a ObjetosO que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a Objetos
Danilo Sato
 
Testes automatizados (2)
Testes automatizados (2)Testes automatizados (2)
Testes automatizados (2)
cesarvianna
 
P 101 ep 1-d
P 101 ep 1-dP 101 ep 1-d
Selenium and Cucumber Automation Services
Selenium and Cucumber Automation ServicesSelenium and Cucumber Automation Services
Selenium and Cucumber Automation Services
LMS Solutions (India) Pvt.Ltd.
 
Programacao Orientada A Objetos (Java)
Programacao Orientada A Objetos (Java)Programacao Orientada A Objetos (Java)
Programacao Orientada A Objetos (Java)
Robson Silva Espig
 

Destaque (20)

BDD com Cucumber
BDD com CucumberBDD com Cucumber
BDD com Cucumber
 
Jefferson Andrade - BDD - Behavior-Driven Development - ITA
Jefferson Andrade - BDD - Behavior-Driven Development - ITAJefferson Andrade - BDD - Behavior-Driven Development - ITA
Jefferson Andrade - BDD - Behavior-Driven Development - ITA
 
BDD & Cucumber
BDD & CucumberBDD & Cucumber
BDD & Cucumber
 
Gherkin
Gherkin   Gherkin
Gherkin
 
Integration Test Cucumber + Webrat + Selenium
Integration Test Cucumber + Webrat + SeleniumIntegration Test Cucumber + Webrat + Selenium
Integration Test Cucumber + Webrat + Selenium
 
BDD on Java Concordion and Selenium
BDD on Java Concordion and SeleniumBDD on Java Concordion and Selenium
BDD on Java Concordion and Selenium
 
Testes In Browser Em Rails Com Capybara E Webdriver
Testes In Browser Em Rails Com Capybara E WebdriverTestes In Browser Em Rails Com Capybara E Webdriver
Testes In Browser Em Rails Com Capybara E Webdriver
 
Aula 02 POO - Meu Primeiro Código
Aula 02 POO - Meu Primeiro CódigoAula 02 POO - Meu Primeiro Código
Aula 02 POO - Meu Primeiro Código
 
Geek night-2015
Geek night-2015Geek night-2015
Geek night-2015
 
Behaviour Driven Development
Behaviour Driven DevelopmentBehaviour Driven Development
Behaviour Driven Development
 
BDD - aula
BDD - aulaBDD - aula
BDD - aula
 
Embedded software, hardware design and automation software
Embedded software, hardware design and automation softwareEmbedded software, hardware design and automation software
Embedded software, hardware design and automation software
 
Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08
 
Nasdanika WebTest - Modular functional testing of Web and Mobile Applications
Nasdanika WebTest - Modular functional testing of Web and Mobile ApplicationsNasdanika WebTest - Modular functional testing of Web and Mobile Applications
Nasdanika WebTest - Modular functional testing of Web and Mobile Applications
 
selenium-cucumber
selenium-cucumberselenium-cucumber
selenium-cucumber
 
O que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a ObjetosO que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a Objetos
 
Testes automatizados (2)
Testes automatizados (2)Testes automatizados (2)
Testes automatizados (2)
 
P 101 ep 1-d
P 101 ep 1-dP 101 ep 1-d
P 101 ep 1-d
 
Selenium and Cucumber Automation Services
Selenium and Cucumber Automation ServicesSelenium and Cucumber Automation Services
Selenium and Cucumber Automation Services
 
Programacao Orientada A Objetos (Java)
Programacao Orientada A Objetos (Java)Programacao Orientada A Objetos (Java)
Programacao Orientada A Objetos (Java)
 

Semelhante a BDD: Cucumber + Selenium + Java

Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
Alvaro Viebrantz
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
Thiago Cifani
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
tchandy
 
Agile Brazil 2018
Agile Brazil 2018Agile Brazil 2018
Agile Brazil 2018
Karla Silva
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDD
Dextra
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Daniel Makiyama
 
De 0 a DevOps
De 0 a DevOpsDe 0 a DevOps
Precisamos falar sobre Gradle
Precisamos falar sobre GradlePrecisamos falar sobre Gradle
Precisamos falar sobre Gradle
Wellington Pinheiro
 
Bdd rails 3
Bdd rails 3Bdd rails 3
Bdd rails 3
tchandy
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
Rafael Benevides
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
Luiz Henrique Zambom Santana
 
performance em jQuery apps
performance em jQuery appsperformance em jQuery apps
performance em jQuery apps
Davidson Fellipe
 
BDD em Testes de Serviço
BDD em Testes de ServiçoBDD em Testes de Serviço
BDD em Testes de Serviço
Rafael Lima
 
jQuery
jQueryjQuery
jQuery
Bruno Cunha
 
jQuery
jQueryjQuery
jQuery
Bruno Cunha
 
BDD com Cucumber
BDD com CucumberBDD com Cucumber
BDD com Cucumber
Márcio Queiroz
 
Conhecendo os Padrões De Projetos
Conhecendo os Padrões De ProjetosConhecendo os Padrões De Projetos
Conhecendo os Padrões De Projetos
cejug
 
Testes Funcionais Orientado a Imagem - Sikuli
Testes Funcionais Orientado a Imagem - SikuliTestes Funcionais Orientado a Imagem - Sikuli
Testes Funcionais Orientado a Imagem - Sikuli
Vanilton Pinheiro
 
Backbone.js nas trincheiras
Backbone.js nas trincheirasBackbone.js nas trincheiras
Backbone.js nas trincheiras
Lambda 3
 
[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018
Larissa Soares
 

Semelhante a BDD: Cucumber + Selenium + Java (20)

Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
 
Agile Brazil 2018
Agile Brazil 2018Agile Brazil 2018
Agile Brazil 2018
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDD
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 
De 0 a DevOps
De 0 a DevOpsDe 0 a DevOps
De 0 a DevOps
 
Precisamos falar sobre Gradle
Precisamos falar sobre GradlePrecisamos falar sobre Gradle
Precisamos falar sobre Gradle
 
Bdd rails 3
Bdd rails 3Bdd rails 3
Bdd rails 3
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 
performance em jQuery apps
performance em jQuery appsperformance em jQuery apps
performance em jQuery apps
 
BDD em Testes de Serviço
BDD em Testes de ServiçoBDD em Testes de Serviço
BDD em Testes de Serviço
 
jQuery
jQueryjQuery
jQuery
 
jQuery
jQueryjQuery
jQuery
 
BDD com Cucumber
BDD com CucumberBDD com Cucumber
BDD com Cucumber
 
Conhecendo os Padrões De Projetos
Conhecendo os Padrões De ProjetosConhecendo os Padrões De Projetos
Conhecendo os Padrões De Projetos
 
Testes Funcionais Orientado a Imagem - Sikuli
Testes Funcionais Orientado a Imagem - SikuliTestes Funcionais Orientado a Imagem - Sikuli
Testes Funcionais Orientado a Imagem - Sikuli
 
Backbone.js nas trincheiras
Backbone.js nas trincheirasBackbone.js nas trincheiras
Backbone.js nas trincheiras
 
[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018
 

Mais de Cesar Augusto Nogueira

TI para o Sucesso nos Negócios
TI para o Sucesso nos NegóciosTI para o Sucesso nos Negócios
TI para o Sucesso nos Negócios
Cesar Augusto Nogueira
 
Programa LeadingMyself - Accenture 2021
Programa LeadingMyself - Accenture 2021Programa LeadingMyself - Accenture 2021
Programa LeadingMyself - Accenture 2021
Cesar Augusto Nogueira
 
Professional Google Cloud Architect
Professional Google Cloud ArchitectProfessional Google Cloud Architect
Professional Google Cloud Architect
Cesar Augusto Nogueira
 
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ..."Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
Cesar Augusto Nogueira
 
Minando dados de sua cidade para sua comunidade
Minando dados de sua cidade para sua comunidadeMinando dados de sua cidade para sua comunidade
Minando dados de sua cidade para sua comunidade
Cesar Augusto Nogueira
 
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017
Cesar Augusto Nogueira
 
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...
Cesar Augusto Nogueira
 
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016
Cesar Augusto Nogueira
 
OpenSource Java - Adopt a JDK e OpenJDK
OpenSource Java - Adopt a JDK e OpenJDKOpenSource Java - Adopt a JDK e OpenJDK
OpenSource Java - Adopt a JDK e OpenJDK
Cesar Augusto Nogueira
 
Android Wear - Workshop por @cesarnogcps
Android Wear - Workshop por @cesarnogcpsAndroid Wear - Workshop por @cesarnogcps
Android Wear - Workshop por @cesarnogcps
Cesar Augusto Nogueira
 
Certificado de participação - Trilha Python - The Developers Conference 2016 SP
Certificado de participação - Trilha Python - The Developers Conference 2016 SPCertificado de participação - Trilha Python - The Developers Conference 2016 SP
Certificado de participação - Trilha Python - The Developers Conference 2016 SP
Cesar Augusto Nogueira
 
Docker e suas tecnologias
Docker e suas tecnologiasDocker e suas tecnologias
Docker e suas tecnologias
Cesar Augusto Nogueira
 
Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnog
Cesar Augusto Nogueira
 
Certificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
Certificado de participação no Hackathon Globo 2016 - Cesar A. NogueiraCertificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
Certificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
Cesar Augusto Nogueira
 
Certificado_Python_Brasil_11_Cesar Augusto Nogueira
Certificado_Python_Brasil_11_Cesar Augusto NogueiraCertificado_Python_Brasil_11_Cesar Augusto Nogueira
Certificado_Python_Brasil_11_Cesar Augusto Nogueira
Cesar Augusto Nogueira
 
First Steps with Android - An Exciting Introduction
First Steps with Android - An Exciting IntroductionFirst Steps with Android - An Exciting Introduction
First Steps with Android - An Exciting Introduction
Cesar Augusto Nogueira
 
Introduction to RDF Data Model
Introduction to RDF Data ModelIntroduction to RDF Data Model
Introduction to RDF Data Model
Cesar Augusto Nogueira
 
Brazil Scientific Mobility Program guide 2013/2014
Brazil Scientific Mobility Program guide 2013/2014Brazil Scientific Mobility Program guide 2013/2014
Brazil Scientific Mobility Program guide 2013/2014
Cesar Augusto Nogueira
 
[BRAZIL] Science without Borders program description
[BRAZIL] Science without Borders program description[BRAZIL] Science without Borders program description
[BRAZIL] Science without Borders program description
Cesar Augusto Nogueira
 
Colégio Técnico de Campinas (COTUCA) 2013/2014
Colégio Técnico de Campinas (COTUCA) 2013/2014Colégio Técnico de Campinas (COTUCA) 2013/2014
Colégio Técnico de Campinas (COTUCA) 2013/2014
Cesar Augusto Nogueira
 

Mais de Cesar Augusto Nogueira (20)

TI para o Sucesso nos Negócios
TI para o Sucesso nos NegóciosTI para o Sucesso nos Negócios
TI para o Sucesso nos Negócios
 
Programa LeadingMyself - Accenture 2021
Programa LeadingMyself - Accenture 2021Programa LeadingMyself - Accenture 2021
Programa LeadingMyself - Accenture 2021
 
Professional Google Cloud Architect
Professional Google Cloud ArchitectProfessional Google Cloud Architect
Professional Google Cloud Architect
 
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ..."Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
 
Minando dados de sua cidade para sua comunidade
Minando dados de sua cidade para sua comunidadeMinando dados de sua cidade para sua comunidade
Minando dados de sua cidade para sua comunidade
 
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017
 
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...
 
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016
 
OpenSource Java - Adopt a JDK e OpenJDK
OpenSource Java - Adopt a JDK e OpenJDKOpenSource Java - Adopt a JDK e OpenJDK
OpenSource Java - Adopt a JDK e OpenJDK
 
Android Wear - Workshop por @cesarnogcps
Android Wear - Workshop por @cesarnogcpsAndroid Wear - Workshop por @cesarnogcps
Android Wear - Workshop por @cesarnogcps
 
Certificado de participação - Trilha Python - The Developers Conference 2016 SP
Certificado de participação - Trilha Python - The Developers Conference 2016 SPCertificado de participação - Trilha Python - The Developers Conference 2016 SP
Certificado de participação - Trilha Python - The Developers Conference 2016 SP
 
Docker e suas tecnologias
Docker e suas tecnologiasDocker e suas tecnologias
Docker e suas tecnologias
 
Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnog
 
Certificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
Certificado de participação no Hackathon Globo 2016 - Cesar A. NogueiraCertificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
Certificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
 
Certificado_Python_Brasil_11_Cesar Augusto Nogueira
Certificado_Python_Brasil_11_Cesar Augusto NogueiraCertificado_Python_Brasil_11_Cesar Augusto Nogueira
Certificado_Python_Brasil_11_Cesar Augusto Nogueira
 
First Steps with Android - An Exciting Introduction
First Steps with Android - An Exciting IntroductionFirst Steps with Android - An Exciting Introduction
First Steps with Android - An Exciting Introduction
 
Introduction to RDF Data Model
Introduction to RDF Data ModelIntroduction to RDF Data Model
Introduction to RDF Data Model
 
Brazil Scientific Mobility Program guide 2013/2014
Brazil Scientific Mobility Program guide 2013/2014Brazil Scientific Mobility Program guide 2013/2014
Brazil Scientific Mobility Program guide 2013/2014
 
[BRAZIL] Science without Borders program description
[BRAZIL] Science without Borders program description[BRAZIL] Science without Borders program description
[BRAZIL] Science without Borders program description
 
Colégio Técnico de Campinas (COTUCA) 2013/2014
Colégio Técnico de Campinas (COTUCA) 2013/2014Colégio Técnico de Campinas (COTUCA) 2013/2014
Colégio Técnico de Campinas (COTUCA) 2013/2014
 

Último

TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Gabriel de Mattos Faustino
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 

Último (8)

TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 

BDD: Cucumber + Selenium + Java

  • 1. Behavior Driven Development Na prática: Cucumber + Selenium + Java
  • 2. Agenda • Objetivos • Conceitos Processo tradicional (Sem BDD) Problemas do processo tradicional Motivos e história Alternativa: BDD Conhecendo BDD Comparação - BDD vs tradicional Obstáculos para adoção de BDD • Prática Ferramentas utilizadas cucumber-jvm Estudo de caso 1: Teste unitário (Oi mundo) Selenium Estudo de caso 2: busca de projeto no github com Selenium
  • 3. Objetivos • Apresentar BDD e comparativo com modelo tradicional de desenvolvimento • Apresentar CUCUMBER como framework para BDD • Como Cucumber-jvm pode ser usado para implementar BDD com Java • Testes de ponta-a-ponta com Selenium
  • 4. Conceitos - Processo tradicional (sem BDD) Modelo em cascata
  • 5. Conceitos - Processo tradicional (sem BDD) Modelo RUP
  • 6. Conceitos - Processo tradicional (sem BDD) • Formalização de escopo com usuário chave por meio de especificações funcionais e técnicas • Qualidade é garantida com testes manuais • Casos de teste criados a partir de especificações funcionais e técnicas • Desenvolvedor faz teste unitário antes do caso de teste estar pronto
  • 7. Conceitos - Problemas do processo tradicional • Gasta-se esforço para criar especificação funcional e mais esforço para criar casos de teste • Desenvolvedores normalmente não conhecem tanto o negócio, há uma barreira com o usuário • Especificação normalmente insuficiente - usuário sempre esquece alguma coisa • Foco em padronização e não no que agrega valor para o negócio
  • 8. Conceitos - Motivos e História • Fábrica de Software - modelo proveniente da primeira revolução industrial - Fordismo, padronização de saídas, padronização de processos de trabalho • Software - um é diferente do outro - trabalho braçal feito pelo compilador • Programa = especificação • Necessidade de documentação: formalização com o usuário
  • 9. Conceitos - Alternativa: BDD • BDD = Behavior Driven Development • Se opõe ao modelo tradicional, seguindo conceitos de desenvolvimento ágil • Parte da premissa que cada software é diferente um do outro • Foco no que agrega valor ao negócio
  • 10. Conceitos - Conhecendo BDD • Modelo ágil de desenvolvimento de segunda geração, surgindo a partir do TDD (Test Driven Development) e do DDD (Domain Driven Design) • Criador do BDD: Dan North • Testes = Requisitos • Todos participam da definição dos cenários: usuário, analistas de negócio, testadores, desenvolvedores • Todos devem ter um entendimento comum sobre o que será desenvolvido • A definição deve ser direta e objetiva, tendo só o necessário
  • 11. Conceitos - Conhecendo BDD • Story: Account Holder withdraws cash • • As an Account Holder • I want to withdraw cash from an ATM • So that I can get money when the bank is closed • • Scenario 1: Account has sufficient funds • Given the account balance is $100 • And the card is valid • And the machine contains enough money • When the Account Holder requests $20 • Then the ATM should dispense $20 • And the account balance should be $80 • And the card should be returned • • Scenario 2: Account has insufficient funds • Given the account balance is $10 • And the card is valid • And the machine contains enough money • When the Account Holder requests $20 • Then the ATM should not dispense any money
  • 12. Conceitos - Conhecendo BDD • Narrativa (estória): o Deve ter um título bem definido o Composta de cenários o Deve definir um papel, um feature e um benefício (“As a [role] I want [feature] so that [benefit]“ ) • Componentes de um cenário: o Given - pré-condição do teste o When - Teste propriamente dito o Then - Resultado esperado • O que seriam condições de um caso de uso passam a ser cenários diferentes
  • 13. Conceitos - Conhecendo BDD • Exemplo de processo BDD
  • 14. Conceitos - Comparação - BDD vs tradicional Tradicional BDD Gasto de Gasto de esforço = esforço = levantamento levantamento de requisitos + de cenários + análise & design desenvolviment + criação de o testes + execução dos testes + desenvolviment o Durante o Maior facilidade projeto em por todos para andamento, enxergar o que normalmente será alguém desenvolvido esqueceu de algo
  • 15. Conceitos - Obstáculos para adoção de BDD • Cultura organizacional - quebra de paradigma - resistência por falta de conhecimento • Envolve mudanças na relação com o cliente / usuário chave • Elaboração de cenários errada pode levar a adoção ao fracasso • Nem todo teste é automatizável
  • 16. Prática - Ferramentas utilizadas • Cucumber JVM => BDD com Java • Selenium => Automatização de navegação WEB • JUnit ou ANT Task => Execução dos testes / geração de relatórios • Ferramentas específicas dependendo do teste. Exemplo: jaxws para testar webservices.
  • 17. Prática - Ferramentas utilizadas - Cucumber JVM • Cucumber = Framework para BDD originalmente desenvolvido para Ruby • URL: https://github.com/cucumber Licença: MIT • Cucumber-JVM = versão java do Cucumber • O que faz: o Lê texto e acha o método java correspondente o Gera relatórios o Provê integração com JUnit/ANT
  • 18. Prática - Estudo de caso 1: teste unitário • Queremos desenvolver um aplicativo "Oi mundo" • Temos o seguinte teste (helloworld.feature): Feature: Oi mundo Scenario: Diga oi Given Minha saudacao e "Oi" When Eu executo minha aplicacao Then Ela deveria responder com "Oi mundo"
  • 19. Prática - Estudo de caso 1: teste unitário • Código inicial: public class Hello { public Hello(String greeting) { } public String sayHi() { return ""; }
  • 20. Prática - Estudo de caso 1: teste unitário • Automatização dos passos: public class HelloStepdefs { private Hello hello; private String hi; @Given("^Minha saudacao e "([^"]*)"$") public void I_have_a_hello_app_with(String greeting) { hello = new Hello(greeting); } @When("^Eu executo minha aplicacao$") public void I_ask_it_to_say_hi() { hi = hello.sayHi(); } @Then("^Ela deveria responder com "([^"]*)"$")
  • 21. Prática - Estudo de caso 1: teste unitário • Classe JUnit: import cucumber.junit.Cucumber; import org.junit.runner.RunWith; @RunWith(Cucumber.class) @Cucumber.Options(format = { "pretty", "html:target/cucumber-html-report" }) public class RunCukesTest { }
  • 22. Prática - Estudo de caso 1: teste unitário • Relatório inicial:
  • 23. Prática - Estudo de caso 1: teste unitário • Implementação do código: package cucumber.examples.java.helloworld; public class Hello { private final String greeting; public Hello(String greeting) { this.greeting = greeting; } public String sayHi() { return greeting + " mundo";
  • 24. Prática - Estudo de caso 1: teste unitário • Relatório final:
  • 25. Prática - Ferramentas utilizadas - Selenium • Selenium = Framework Open Source Java para automatização de navegação internet a partir do java = correspondente java do rspec • URL: http://seleniumhq.org/ • Diversas APIs e ferramentas associadas, tudo com licença Apache 2.0 • Plugin para firefox que grava testes e exporta código java • O que faz: o Abre browser web
  • 26. Prática - Estudo de caso 2: busca de projeto no github • Temos o seguinte teste (github.feature): Feature: Busca Github Scenario: Busca por usuario Given Eu estou no site "http://github.com" When Eu procuro por "cucumber" And Eu clico no link com descricao "cucumber" Then Eu deveria encontrar um link com descricao "cucumber-jvm" Scenario: Busca por projeto Given Eu estou no site "http://github.com" When Eu procuro por "cucumber" Then Eu deveria encontrar um link com descricao "cucumber / cucumber"
  • 27. Prática - Estudo de caso 2: busca de projeto no github • Automatização: public class GithubStepdefs { private WebDriver driver; @Given("^Eu estou no site "([^"]*)"$") public void eu_estou_no_site(String site) throws Exception { driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); driver.get(site); } @When("^Eu procuro por "([^"]*)"$") public void eu_procuro_por (String searchText) throws Exception { driver.findElement(By.name("q")).clear(); driver.findElement(By.name("q")).sendKeys(searchText + "n"); } @When("^Eu clico no link com descricao "([^"]*)"$") public void eu_clico_no_link_com_descricao (String expectedLinkText) throws Exception { driver.findElement(By.linkText(expectedLinkText)).click(); } @Then("^Eu deveria encontrar um link com descricao "([^"]*)"$") public void eu_deveria_encontrar_um_link_com_descricao (String expectedLinkText) throws Exception { Assert.assertNotNull(driver.findElement(By .linkText(expectedLinkText))); driver.quit(); } }
  • 28. Prática - Estudo de caso 2: busca de projeto no github • Execução:
  • 29. Prática - Estudo de caso 2: busca de projeto no github • Relatório: