SlideShare uma empresa Scribd logo
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
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
And I should see filter message in
the screen
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
@diff_group = ""
@filter_value = ""
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
And(/^I should see filter message in the
screen$/) do
@page.dino_results.text.should ==
"Results for ""+@filter_value+""
and DD Group ""+@diff_group+"""
end
Arquivos & Diretórios
o  Features
o  Cada feature é salva como arquivo .feature
o  Features são salvas no diretório features
o  Step definitions
o  step definitions são salvos com extensão .rb
o  Step definitions são salvos no diretório
step_definitions
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/testautomation-with-cucumberjvm
o Code Centric:
https://blog.codecentric.de/en/2013/08/cucumbersetup-basics/
o Code Centric:
http://blog.codeship.io/2013/05/21/TestingTuesday-6-Top-5-Cucumber-best-practices.html
o The Cucumber Book: Behaviour-Driven
Development for Testers and Developers, by Matt
Wynne and Aslak Hellesøy
Dúvidas?

Mais conteúdo relacionado

Semelhante a Cucumber

Dito Tech Talk RSpec
Dito Tech Talk RSpecDito Tech Talk RSpec
Dito Tech Talk RSpec
guest49d83b2
 
Angular 2 em 60 minutos
Angular 2 em 60 minutosAngular 2 em 60 minutos
Angular 2 em 60 minutos
Loiane Groner
 
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
lucashungaro
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
Pablo Dall'Oglio
 
Cucumber Best Practices
Cucumber Best PracticesCucumber Best Practices
Cucumber Best Practices
Karoline Leite
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
Diemesleno Souza Carvalho
 
Api usando Silex
Api usando SilexApi usando Silex
Api usando Silex
Elton Minetto
 
Testando Rails apps com RSpec
Testando Rails apps com RSpecTestando Rails apps com RSpec
Testando Rails apps com RSpec
Nando Vieira
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
Sergio Henrique
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
Adler Medrado
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephp
Rodrigo Aramburu
 
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
Jean Carlo Emer
 
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
Rodrigo Nossal
 
Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOL
targinosilveira
 
Django - Criando Aplicacoes Plugaveis
Django - Criando Aplicacoes PlugaveisDjango - Criando Aplicacoes Plugaveis
Django - Criando Aplicacoes Plugaveis
Marinho Brandão
 
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
José Correia
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
Régis Eduardo Weizenmann Gregol
 
Oficial
OficialOficial
rails_and_agile
rails_and_agilerails_and_agile
rails_and_agile
Juan Maiz
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
Michel Ribeiro
 

Semelhante a Cucumber (20)

Dito Tech Talk RSpec
Dito Tech Talk RSpecDito Tech Talk RSpec
Dito Tech Talk RSpec
 
Angular 2 em 60 minutos
Angular 2 em 60 minutosAngular 2 em 60 minutos
Angular 2 em 60 minutos
 
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
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
Cucumber Best Practices
Cucumber Best PracticesCucumber Best Practices
Cucumber Best Practices
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 
Api usando Silex
Api usando SilexApi usando Silex
Api usando Silex
 
Testando Rails apps com RSpec
Testando Rails apps com RSpecTestando Rails apps com RSpec
Testando Rails apps com RSpec
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephp
 
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
 
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
 
Django - Criando Aplicacoes Plugaveis
Django - Criando Aplicacoes PlugaveisDjango - Criando Aplicacoes Plugaveis
Django - Criando Aplicacoes Plugaveis
 
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
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Oficial
OficialOficial
Oficial
 
rails_and_agile
rails_and_agilerails_and_agile
rails_and_agile
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 

Último

Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
Momento da Informática
 
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
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
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
 

Último (6)

Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
 
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
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.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
 

Cucumber

  • 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
  • 12. 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
  • 13. 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 And I should see filter message in the screen
  • 14. 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
  • 15. 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 @diff_group = "" @filter_value = "" end
  • 16. 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 And(/^I should see filter message in the screen$/) do @page.dino_results.text.should == "Results for ""+@filter_value+"" and DD Group ""+@diff_group+""" end
  • 17. Arquivos & Diretórios o  Features o  Cada feature é salva como arquivo .feature o  Features são salvas no diretório features o  Step definitions o  step definitions são salvos com extensão .rb o  Step definitions são salvos no diretório step_definitions
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 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” 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
  • 26. 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
  • 27. Resumo o Estrutura do Cucumber: o Business facing: Features, Scenarios & Steps o Technology Facing: Step Definitions, Support Code & Automation Library
  • 28. 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
  • 29. References o Test automation with Cucumber-JVM: http://pt.slideshare.net/alan_parkinson/testautomation-with-cucumberjvm o Code Centric: https://blog.codecentric.de/en/2013/08/cucumbersetup-basics/ o Code Centric: http://blog.codeship.io/2013/05/21/TestingTuesday-6-Top-5-Cucumber-best-practices.html o The Cucumber Book: Behaviour-Driven Development for Testers and Developers, by Matt Wynne and Aslak Hellesøy