SlideShare uma empresa Scribd logo
1 de 30
http://cukes.info/

Taíse Dias da Silva
taisedias@gmail.com
Agenda
o
o
o
o
o

Por que Cucumber?
Estrutura do Cucumber (testing stack)
Feature, Scenario & Step Definitions
Melhores práticas
Referências
Por que Cucumber?
Software - Problemas
o Software: o que pode acontecer de
errado?
o Defeito de implementação
o Programa não faz o que pretendia
o Corrigido em desenvolvimento/QA

o Defeito no requisito
o Programa faz o que pretendia
o O requisito não foi compreendido corretamente
Software - Problemas
o 50-60% dos problemas encontrados por
testadores são causados por problemas
nos requisitos
o 100-200% mais caro para se corrigir do
que os outros defeitos porque o código
já estará escrito
Como Cucumber pode ajudar?
o Cucumber é uma ferramenta baseada
em Behavior Driven Development (BDD)
o Stakeholders focam em especificação
baseada no valor do negócio
o Especificações escritas em linguagem
natural (qualquer um consegue ler)
Como Cucumber pode ajudar?
o Especificações viram testes de
aceitação, descrevendo exemplos do
comportamento do software antes da
implementação (feedback cedo)
o Testes são usados na regressão durante
a evolução do software
O que é Cucumber?
o Cucumber é uma ferramenta que
executa descrições funcionais em
texto puro como testes

automatizados
o Texto puro: escrito em Gherkin
o Automação: escrita em alguma
linguagem de programação
Cucumber Testing Stack
Cucumber testing stack
Seu projeto
Business
Facing

Seu sistema

Features

Automation library

Scenarios

Support code

Steps

Step definitions

Technology
Facing
Cucumber testing stack
Android

Seu projeto
Web

Seu sistema
Web
Service

Application

Business
Facing

Features
Scenarios
Selenium
Steps

Automation library
Support code

Watir

Step definitions

Technology
Facing
Features, Scenarios &
Step Definitions
Feature
o Testes em Cucumber são agrupados em
features
Feature: Acess app Dinossaurs
<<description>>

o Cada teste em Cucumber chama-se scenario
Scenario: List dinos names
Scenario & Steps
o Cada scenario contém steps que diz ao
Cucumber o que fazer

Given I am in Dino app
When I choose List
Then I see the list of dinosaurs
Step Definitions
o Para que Cucumber saiba como executar um
scenario de uma feature, precisamos escrever
step definition.
Given(/^I am in Dino app$/) do
pending # express the regexp above
with the code you wish you had
end
Step Definitions
o Para implementar step definition:
o Substitua comentário por código
o Código delega para o support code,
específico do domínio da sua app
o O support code usa uma automation library
para interagir com o sistema.
Given(/^I am in Dino app$/) do
@page = Index.new
@page.load
end
Step Definitions
When(/^I choose List$/) do
@page.list_link.click
end
Then(/^I see the list of dinosaurs$/) do
@page.should have_dino_list
@page.should_not have_dino_image
end
Exemplo
o Cucumber JVM:
o https://github.com/taisedias/dinossauros
Melhores Práticas
Features Declarativas
Feature: Dinosaurs app access
Scenario: List dinos names
Given I go to the home page
When I click the link "List"
Then the page should contain a list of Dinosaurs
Feature: Dinosaurs app access
Scenario: List dinos names
Given I am in Dino app
When I list dinos names
Then I see a list of Dinosaurs
Features Narrativas
Feature: Dinosaurs app access
Scenario: List dinos names
Given I am in Dino app
When I choose List
Then I see list of Dinosaurs
Feature: Dinosaurs app access
In order to identify dinosaurs
As a bones keeper
I want to access information about dinosaurs
Scenario: List dinos names
Given I am in Dino app
When I choose List
Then I see list of Dinosaurs
Evitar steps conjuntivos
# Scenario 1
...
When I compose an email to “john@john.com” and send it
...

# step definition
When(/^I compose an email to “(.*)” and send it$/) do |email_address|
email = Email.new recipient: email_address
email.send
end
# Scenario 2
...
When I compose an email to “john@john.com”
And I add “mary@mary.com” as recipient
And I send the email
...
# step definition
When(/^I compose an email to “(.*)”$/) do |email_address|
@email = Email.new recipient: email_address
end
When(/^I send an email$/) do
@email.send
end
Reusar step definitions
# feature
...
When I compose an informal email to “friend@gap.com”
And I send an email
...
# step definition
When(/^I compose an email to “(.*)” and send it$/) do
|email_address|
@email = Email.new recipient: email_address
end
...
When(/^I compose an informal email to “(.*)”$/) do
|email_address|
Step %{I compose an e-mail to “#{email_address}”}
@email.set_greeting “Ahoi mate”
end
Não abusar do uso do Background
Feature: Using the background
In order to ...
Background:
Given I am signed up as “qa@it.com”
Scenario: Acessing a build
When I go to the dashboard
Then I should be able to access the
build
Scenario: Restarting a build
When I go to the dashboard
Then I should be able to restart the
build
Não abusar do uso do Background
Feature: Using the background
In order to ...
Background:
Given I am signed up as “qa@it.com”
When I go to the dashboard
Scenario: Acessing a build
Then I should be able to access the
build
Scenario: Restarting a build
Then I should be able to restart the
build
Resumo
Resumo
o Cucumber ajuda o time de desenvolvimento
de software a:
o Compreender corretamente os requisitos
através de exemplos
o Usar o mesmo vocabulário para fala sobre
o software
o Ter uma documentação viva (executável) e
de fácil leitura em linguagem natural
Resumo
o Estrutura do Cucumber:
o Business facing: Features, Scenarios &
Steps
o Technology Facing: Step Definitions, Support
Code & Automation Library
Resumo
o Melhores práticas:
o Escrever features declarativas
o Inserir narrative nas features
o Evitar steps conjuntivos
o Reusar step definitions
o Não abusar do uso de backgrounds
References
o Test automation with Cucumber-JVM:
http://pt.slideshare.net/alan_parkinson/test-automationwith-cucumberjvm
o Code Centric:
https://blog.codecentric.de/en/2013/08/cucumbersetup-basics/
o Code Centric:
http://blog.codeship.io/2013/05/21/Testing-Tuesday-6Top-5-Cucumber-best-practices.html
o The Cucumber Book: Behaviour-Driven Development
for Testers and Developers, by Matt Wynne and Aslak
Hellesøy
o Cucumber JVM:
https://github.com/cucumber/cucumber-jvm

Mais conteúdo relacionado

Semelhante a Cucumber BDD - Introdução à ferramenta e melhores práticas

Cucumber Best Practices
Cucumber Best PracticesCucumber Best Practices
Cucumber Best PracticesKaroline Leite
 
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
 
pepinos do cliente no código de testes da aplicação com OSS
pepinos do cliente no código de testes da aplicação com OSSpepinos do cliente no código de testes da aplicação com OSS
pepinos do cliente no código de testes da aplicação com OSSRodrigo Urubatan
 
Testando Rails apps com RSpec
Testando Rails apps com RSpecTestando Rails apps com RSpec
Testando Rails apps com RSpecNando Vieira
 
SOLID através de BDD: um guia prático para rubistas
SOLID através de BDD: um guia prático para rubistasSOLID através de BDD: um guia prático para rubistas
SOLID através de BDD: um guia prático para rubistaslucashungaro
 
rails_and_agile
rails_and_agilerails_and_agile
rails_and_agileJuan Maiz
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
C#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variânciaC#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variânciaGiovanni Bassi
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsJulio Betta
 
QArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio AraújoQArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio AraújoJosé Correia
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosRodrigo Nossal
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLtarginosilveira
 
Aplicações Web - um estudo sobre React
Aplicações Web - um estudo sobre ReactAplicações Web - um estudo sobre React
Aplicações Web - um estudo sobre ReactJean Carlo Emer
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Carlos Duarte do Nascimento
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineCampus Party Brasil
 
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...Leo Baiano
 

Semelhante a Cucumber BDD - Introdução à ferramenta e melhores práticas (20)

Cucumber Best Practices
Cucumber Best PracticesCucumber Best Practices
Cucumber Best Practices
 
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...
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
pepinos do cliente no código de testes da aplicação com OSS
pepinos do cliente no código de testes da aplicação com OSSpepinos do cliente no código de testes da aplicação com OSS
pepinos do cliente no código de testes da aplicação com OSS
 
Testando Rails apps com RSpec
Testando Rails apps com RSpecTestando Rails apps com RSpec
Testando Rails apps com RSpec
 
BDD com Cucumber
BDD com CucumberBDD com Cucumber
BDD com Cucumber
 
SOLID através de BDD: um guia prático para rubistas
SOLID através de BDD: um guia prático para rubistasSOLID através de BDD: um guia prático para rubistas
SOLID através de BDD: um guia prático para rubistas
 
rails_and_agile
rails_and_agilerails_and_agile
rails_and_agile
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
C#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variânciaC#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variância
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on Rails
 
QArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio AraújoQArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio Araújo
 
Api usando Silex
Api usando SilexApi usando Silex
Api usando Silex
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutos
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOL
 
Aplicações Web - um estudo sobre React
Aplicações Web - um estudo sobre ReactAplicações Web - um estudo sobre React
Aplicações Web - um estudo sobre React
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...
 

Mais de Taise Dias da Silva

TheDevConf 2016 - 4 dicas valiosas para uma piramide de testes saudavel
TheDevConf 2016 - 4 dicas valiosas para uma piramide de testes saudavelTheDevConf 2016 - 4 dicas valiosas para uma piramide de testes saudavel
TheDevConf 2016 - 4 dicas valiosas para uma piramide de testes saudavelTaise Dias da Silva
 
TheDevConf 2016 - Análise efetiva de microservices em 3 passos
TheDevConf 2016 - Análise efetiva de microservices em 3 passosTheDevConf 2016 - Análise efetiva de microservices em 3 passos
TheDevConf 2016 - Análise efetiva de microservices em 3 passosTaise Dias da Silva
 
MTC_2016-analise_efetiva_de_microsservicos
MTC_2016-analise_efetiva_de_microsservicosMTC_2016-analise_efetiva_de_microsservicos
MTC_2016-analise_efetiva_de_microsservicosTaise Dias da Silva
 
Testes automatizados com alto valor de negócio e baixo custo de manutenção
Testes automatizados com alto valor de negócio e baixo custo de manutençãoTestes automatizados com alto valor de negócio e baixo custo de manutenção
Testes automatizados com alto valor de negócio e baixo custo de manutençãoTaise Dias da Silva
 
MTC2015-Automatizar_testes_efetivos
MTC2015-Automatizar_testes_efetivosMTC2015-Automatizar_testes_efetivos
MTC2015-Automatizar_testes_efetivosTaise Dias da Silva
 

Mais de Taise Dias da Silva (6)

TheDevConf 2016 - 4 dicas valiosas para uma piramide de testes saudavel
TheDevConf 2016 - 4 dicas valiosas para uma piramide de testes saudavelTheDevConf 2016 - 4 dicas valiosas para uma piramide de testes saudavel
TheDevConf 2016 - 4 dicas valiosas para uma piramide de testes saudavel
 
TheDevConf 2016 - Análise efetiva de microservices em 3 passos
TheDevConf 2016 - Análise efetiva de microservices em 3 passosTheDevConf 2016 - Análise efetiva de microservices em 3 passos
TheDevConf 2016 - Análise efetiva de microservices em 3 passos
 
MTC_2016-analise_efetiva_de_microsservicos
MTC_2016-analise_efetiva_de_microsservicosMTC_2016-analise_efetiva_de_microsservicos
MTC_2016-analise_efetiva_de_microsservicos
 
Testes automatizados com alto valor de negócio e baixo custo de manutenção
Testes automatizados com alto valor de negócio e baixo custo de manutençãoTestes automatizados com alto valor de negócio e baixo custo de manutenção
Testes automatizados com alto valor de negócio e baixo custo de manutenção
 
MTC2015-Automatizar_testes_efetivos
MTC2015-Automatizar_testes_efetivosMTC2015-Automatizar_testes_efetivos
MTC2015-Automatizar_testes_efetivos
 
Geek night-2015
Geek night-2015Geek night-2015
Geek night-2015
 

Cucumber BDD - Introdução à ferramenta e melhores práticas

  • 1. http://cukes.info/ Taíse Dias da Silva taisedias@gmail.com
  • 2. Agenda o o o o o Por que Cucumber? Estrutura do Cucumber (testing stack) Feature, Scenario & Step Definitions Melhores práticas Referências
  • 4. Software - Problemas o Software: o que pode acontecer de errado? o Defeito de implementação o Programa não faz o que pretendia o Corrigido em desenvolvimento/QA o Defeito no requisito o Programa faz o que pretendia o O requisito não foi compreendido corretamente
  • 5. Software - Problemas o 50-60% dos problemas encontrados por testadores são causados por problemas nos requisitos o 100-200% mais caro para se corrigir do que os outros defeitos porque o código já estará escrito
  • 6. Como Cucumber pode ajudar? o Cucumber é uma ferramenta baseada em Behavior Driven Development (BDD) o Stakeholders focam em especificação baseada no valor do negócio o Especificações escritas em linguagem natural (qualquer um consegue ler)
  • 7. Como Cucumber pode ajudar? o Especificações viram testes de aceitação, descrevendo exemplos do comportamento do software antes da implementação (feedback cedo) o Testes são usados na regressão durante a evolução do software
  • 8. O que é Cucumber? o Cucumber é uma ferramenta que executa descrições funcionais em texto puro como testes automatizados o Texto puro: escrito em Gherkin o Automação: escrita em alguma linguagem de programação
  • 10. Cucumber testing stack Seu projeto Business Facing Seu sistema Features Automation library Scenarios Support code Steps Step definitions Technology Facing
  • 11. Cucumber testing stack Android Seu projeto Web Seu sistema Web Service Application Business Facing Features Scenarios Selenium Steps Automation library Support code Watir Step definitions Technology Facing
  • 13. Feature o Testes em Cucumber são agrupados em features Feature: Acess app Dinossaurs <<description>> o Cada teste em Cucumber chama-se scenario Scenario: List dinos names
  • 14. Scenario & Steps o Cada scenario contém steps que diz ao Cucumber o que fazer Given I am in Dino app When I choose List Then I see the list of dinosaurs
  • 15. Step Definitions o Para que Cucumber saiba como executar um scenario de uma feature, precisamos escrever step definition. Given(/^I am in Dino app$/) do pending # express the regexp above with the code you wish you had end
  • 16. Step Definitions o Para implementar step definition: o Substitua comentário por código o Código delega para o support code, específico do domínio da sua app o O support code usa uma automation library para interagir com o sistema. Given(/^I am in Dino app$/) do @page = Index.new @page.load end
  • 17. Step Definitions When(/^I choose List$/) do @page.list_link.click end Then(/^I see the list of dinosaurs$/) do @page.should have_dino_list @page.should_not have_dino_image end
  • 18. Exemplo o Cucumber JVM: o https://github.com/taisedias/dinossauros
  • 20. Features Declarativas Feature: Dinosaurs app access Scenario: List dinos names Given I go to the home page When I click the link "List" Then the page should contain a list of Dinosaurs Feature: Dinosaurs app access Scenario: List dinos names Given I am in Dino app When I list dinos names Then I see a list of Dinosaurs
  • 21. Features Narrativas Feature: Dinosaurs app access Scenario: List dinos names Given I am in Dino app When I choose List Then I see list of Dinosaurs Feature: Dinosaurs app access In order to identify dinosaurs As a bones keeper I want to access information about dinosaurs Scenario: List dinos names Given I am in Dino app When I choose List Then I see list of Dinosaurs
  • 22. Evitar steps conjuntivos # Scenario 1 ... When I compose an email to “john@john.com” and send it ... # step definition When(/^I compose an email to “(.*)” and send it$/) do |email_address| email = Email.new recipient: email_address email.send end # Scenario 2 ... When I compose an email to “john@john.com” And I add “mary@mary.com” as recipient And I send the email ... # step definition When(/^I compose an email to “(.*)”$/) do |email_address| @email = Email.new recipient: email_address end When(/^I send an email$/) do @email.send end
  • 23. Reusar step definitions # feature ... When I compose an informal email to “friend@gap.com” And I send an email ... # step definition When(/^I compose an email to “(.*)” and send it$/) do |email_address| @email = Email.new recipient: email_address end ... When(/^I compose an informal email to “(.*)”$/) do |email_address| Step %{I compose an e-mail to “#{email_address}”} @email.set_greeting “Ahoi mate” end
  • 24. Não abusar do uso do Background Feature: Using the background In order to ... Background: Given I am signed up as “qa@it.com” Scenario: Acessing a build When I go to the dashboard Then I should be able to access the build Scenario: Restarting a build When I go to the dashboard Then I should be able to restart the build
  • 25. Não abusar do uso do Background Feature: Using the background In order to ... Background: Given I am signed up as “qa@it.com” When I go to the dashboard Scenario: Acessing a build Then I should be able to access the build Scenario: Restarting a build Then I should be able to restart the build
  • 27. Resumo o Cucumber ajuda o time de desenvolvimento de software a: o Compreender corretamente os requisitos através de exemplos o Usar o mesmo vocabulário para fala sobre o software o Ter uma documentação viva (executável) e de fácil leitura em linguagem natural
  • 28. Resumo o Estrutura do Cucumber: o Business facing: Features, Scenarios & Steps o Technology Facing: Step Definitions, Support Code & Automation Library
  • 29. Resumo o Melhores práticas: o Escrever features declarativas o Inserir narrative nas features o Evitar steps conjuntivos o Reusar step definitions o Não abusar do uso de backgrounds
  • 30. References o Test automation with Cucumber-JVM: http://pt.slideshare.net/alan_parkinson/test-automationwith-cucumberjvm o Code Centric: https://blog.codecentric.de/en/2013/08/cucumbersetup-basics/ o Code Centric: http://blog.codeship.io/2013/05/21/Testing-Tuesday-6Top-5-Cucumber-best-practices.html o The Cucumber Book: Behaviour-Driven Development for Testers and Developers, by Matt Wynne and Aslak Hellesøy o Cucumber JVM: https://github.com/cucumber/cucumber-jvm