BDD: Cucumber + Selenium + Java

Download BDD: Cucumber + Selenium + Java

Post on 10-May-2015

1.473 views

Category:

Technology

10 download

Embed Size (px)

DESCRIPTION

Palestra e demonstrao sobre framework Cucumber + framework de gravao de testes Selenium + Linguagem Java

TRANSCRIPT

  • 1.Behavior DrivenDevelopmentNa prtica: Cucumber + Selenium + Java

2. Agenda Objetivos Conceitos Processo tradicional (Sem BDD) Problemas do processo tradicionalMotivos e histriaAlternativa: BDDConhecendo BDDComparao - BDD vs tradicionalObstculos para adoo de BDD PrticaFerramentas utilizadascucumber-jvmEstudo de caso 1: Teste unitrio (Oi mundo)SeleniumEstudo de caso 2: busca de projeto no github com Selenium 3. Objetivos Apresentar BDD e comparativo com modelo tradicionalde desenvolvimento Apresentar CUCUMBER como framework para BDD Como Cucumber-jvm pode ser usado para implementarBDD com Java Testes de ponta-a-ponta com Selenium 4. Conceitos - Processotradicional (sem BDD)Modelo em cascata 5. Conceitos - Processotradicional (sem BDD)Modelo RUP 6. Conceitos - Processotradicional (sem BDD) Formalizao de escopo com usurio chave por meiode especificaes funcionais e tcnicas Qualidade garantida com testes manuais Casos de teste criados a partir de especificaesfuncionais e tcnicas Desenvolvedor faz teste unitrio antes do caso de testeestar pronto 7. Conceitos - Problemas doprocesso tradicional Gasta-se esforo para criar especificao funcional emais esforo para criar casos de teste Desenvolvedores normalmente no conhecem tanto onegcio, h uma barreira com o usurio Especificao normalmente insuficiente - usuriosempre esquece alguma coisa Foco em padronizao e no no que agrega valor parao negcio 8. Conceitos - Motivos eHistria Fbrica de Software - modelo proveniente da primeirarevoluo industrial - Fordismo, padronizao desadas, padronizao de processos de trabalho Software - um diferente do outro - trabalho braal feitopelo compilador Programa = especificao Necessidade de documentao: formalizao com ousurio 9. Conceitos - Alternativa:BDD BDD = Behavior Driven Development Se ope ao modelo tradicional, seguindo conceitos dedesenvolvimento gil Parte da premissa que cada software diferente um dooutro Foco no que agrega valor ao negcio 10. Conceitos - ConhecendoBDD Modelo gil de desenvolvimento de segunda gerao, surgindo a partir do TDD (Test DrivenDevelopment) e do DDD (Domain Driven Design) Criador do BDD: Dan North Testes = Requisitos Todos participam da definio dos cenrios: usurio, analistas de negcio, testadores,desenvolvedores Todos devem ter um entendimento comum sobre o que ser desenvolvido A definio deve ser direta e objetiva, tendo s o necessrio 11. Conceitos - ConhecendoBDD 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 - ConhecendoBDD Narrativa (estria): o Deve ter um ttulo bem definido o Composta de cenrios o Deve definir um papel, um feature e um benefcio (As a [role] I want[feature] so that [benefit] ) Componentes de um cenrio: o Given - pr-condio do teste o When - Teste propriamente dito o Then - Resultado esperado O que seriam condies de um caso de uso passam a ser cenriosdiferentes 13. Conceitos - ConhecendoBDD Exemplo de processo BDD 14. Conceitos - Comparao -BDD vs tradicionalTradicional BDDGasto deGasto deesforo = esforo =levantamentolevantamento de requisitos +de cenrios +anlise & design desenvolviment + criao de o testes + execuo dos testes +desenvolviment o Durante o Maior facilidade projeto empor todos paraandamento, enxergar o que normalmenteser algum desenvolvido esqueceu de algo 15. Conceitos - Obstculospara adoo de BDD Cultura organizacional - quebra de paradigma -resistncia por falta de conhecimento Envolve mudanas na relao com o cliente / usuriochave Elaborao de cenrios errada pode levar a adoo aofracasso Nem todo teste automatizvel 16. Prtica - Ferramentasutilizadas Cucumber JVM => BDD com Java Selenium => Automatizao de navegao WEB JUnit ou ANT Task => Execuo dos testes / geraode relatrios Ferramentas especficas dependendo do teste.Exemplo: jaxws para testar webservices. 17. Prtica - Ferramentasutilizadas - Cucumber JVMCucumber = Framework para BDD originalmente desenvolvido para RubyURL: https://github.com/cucumberLicena: MIT Cucumber-JVM = verso java do Cucumber O que faz:o L texto e acha o mtodo java correspondenteo Gera relatrioso Prov integrao com JUnit/ANT 18. Prtica - Estudo de caso1: teste unitrio Queremos desenvolver um aplicativo "Oi mundo" Temos o seguinte teste (helloworld.feature):Feature: Oi mundo Scenario: Diga oiGiven Minha saudacao e "Oi"When Eu executo minha aplicacaoThen Ela deveria responder com "Oi mundo" 19. Prtica - Estudo de caso1: teste unitrio Cdigo inicial:public class Hello {public Hello(String greeting) {}public String sayHi() {return "";} 20. Prtica - Estudo de caso1: teste unitrio Automatizao 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. Prtica - Estudo de caso1: teste unitrio 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. Prtica - Estudo de caso1: teste unitrio Relatrio inicial: 23. Prtica - Estudo de caso1: teste unitrio Implementao do cdigo: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. Prtica - Estudo de caso1: teste unitrio Relatrio final: 25. Prtica - Ferramentasutilizadas - Selenium Selenium = Framework Open Source Java paraautomatizao de navegao internet a partir do java =correspondente java do rspec URL: http://seleniumhq.org/ Diversas APIs e ferramentas associadas, tudo comlicena Apache 2.0 Plugin para firefox que grava testes e exporta cdigojava O que faz:o Abre browser web 26. Prtica - Estudo de caso2: busca de projeto nogithubTemos o seguinte teste (github.feature):Feature: Busca Github Scenario: Busca por usuarioGiven 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 projetoGiven Eu estou no site "http://github.com"When Eu procuro por "cucumber"Then Eu deveria encontrar um link com descricao "cucumber / cucumber" 27. Prtica - Estudo de caso2: busca de projeto nogithubAutomatizao: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. Prtica - Estudo de caso2: busca de projeto nogithub Execuo: 29. Prtica - Estudo de caso2: busca de projeto nogithub Relatrio: