SlideShare a Scribd company logo
Behaviour-driven
development with
   Cucumber
        Kerry Buckley
  BT DevCon6, 4 February 2013


       http://www.flickr.com/photos/yogendra174/4665988849
BDD with cucumber
A developer tool for
end-to-end testing of
ruby web applications
A developer tool for
end-to-end testing of
ruby web applications
 LIE
Basics
Feature: DevCon talk
  In order to fill the DevCon6 schedule
  As a Cucumber user
  I want to talk about BDD with Cucumber

  Scenario: "BDD with Cucumber" talk
    Given I have managed to prepare a talk
    And there are people there to hear it
    When I give the talk
    Then the audience should learn something
Feature: DevCon talk
  In order to fill the DevCon6 schedule
  As a Cucumber user
  I want to talk about BDD with Cucumber

  Scenario: "BDD with Cucumber" talk
    Given I have managed to prepare a talk
    And there are people there to hear it
    When I give the talk
    Then the audience should learn something
Feature: DevCon talk
  In order to fill the DevCon6 schedule
  As a Cucumber user
  I want to talk about BDD with Cucumber

  Scenario: "BDD with Cucumber" talk
    Given I have managed to prepare a talk
    And there are people there to hear it
    When I give the talk
    Then the audience should learn something
Feature: DevCon talk
  In order to fill the DevCon6 schedule
  As a Cucumber user
  I want to talk about BDD with Cucumber

  Scenario: "BDD with Cucumber" talk
    Given I have managed to prepare a talk
    And there are people there to hear it
    When I give the talk
    Then the audience should learn something
Feature: DevCon talk
  In order to fill the DevCon6 schedule
  As a Cucumber user
  I want to talk about BDD with Cucumber

  Scenario: "BDD with Cucumber" talk
    Given I have managed to prepare a talk
    And there are people there to hear it
    When I give the talk
    Then the audience should learn something
Feature: Withdraw cash from account

  Scenario: Successful withdrawal
    Given I have £100 in my account
    When I request a withdrawal of £20
    Then I should receive £20
    And my balance should be £80
$ cucumber withdraw_cash.feature
Feature: Withdraw cash from account

  Scenario: Successful withdrawal        #   withdraw_cash.feature:3
    Given I have £100 in my account      #   withdraw_cash.feature:4
    When I request a withdrawal of £20   #   withdraw_cash.feature:5
    Then I should receive £20            #   withdraw_cash.feature:6
    And my balance should be £80         #   withdraw_cash.feature:7

1 scenario (1 undefined)
4 steps (4 undefined)
0m0.002s

You can implement step definitions for undefined steps with these snippets:

Given /^I have £(d+) in my account$/ do |arg1|
  pending # express the regexp above with the code you wish you had
end

...
Scenario: Successful login
  Given a user "Fred" with password "secret"
  When I go to the login page
  And I fill in "User name" with "Fred"
  And I fill in "Password" with "secret"
  And I press "Log in"
  Then I should see "Welcome, Fred"
Scenario: Adding a CaaS Linux Service in a production (or test) environment
  Given a fred production environment exists
  And I am on the last deployment page

  When I select "CaaS Linux Service" from "Add a new"
  And I press "Add service"
  And I fill in the following:
    | Role                           | FTP Server |
    | Application Installed Software | None       |
  And I select "SC3 (redside)" from "Security Domain"
  And I select "2" from "Virtual CPUs"
  And I select "2" from "Virtual Memory"
  And I select "OEL 5u6 32bit" from "Operating System"
  And I select "None" from "MaaS(EMB) MQ Client"
  And I select "None" from "Oracle Client"
  And I check "Netbackup Client"
  And I check "XFB Client"
  And I check "BT Hunter Client"
  And I check "BTBPTM Client"
  And I check "Web Tier"
  And I press "Save"

  Then I should be on the last deployment page
  And I should see "Service saved"
  And I should see ...
BDD with cucumber
Scenario: Successful login
  Given a user "Fred" with password "secret"
  When I go to the login page
  And I fill in "User name" with "Fred"
  And I fill in "Password" with "secret"
  And I press "Log in"
  Then I should see "Welcome, Fred"
Scenario: User is greeted upon login
  Given the user "Fred" has an account
  When he logs in
  Then he should see "Welcome, Fred"
Given /^the user "(.*?)" has an account$/ do |name|
  @user = User.find_or_create_by_name name, password: "secret"
end

When /^he logs in$/ do
  visit "/login"
  fill_in "User name", with: @user.name
  fill_in "Password", with: @user.password
  click_button "Log in"
end

Then /^he should see "(.*?)"$/ do |text|
  page.should have_content(text)
end
Scenario: User is greeted upon login
  Given the user "Fred" has an account
  When he logs in
  Then he should see "Welcome, Fred"


Scenario: Secure pages require login
  When I visit a secure page as a guest
  Then I should be asked to log in

 When I log in with a valid account
 Then I should see the secure page
BDD with cucumber
Feature: My awesome system

 Scenario: Using the system
   Given the system exists
   When I use it
   Then everything should work perfectly
A developer tool for
end-to-end testing
of web applications
A developer tool for
      LIE

end-to-end testing
of web applications
Scenario: create a dir
  Given a directory named "foo/bar"
  When I run `file foo/bar`
  Then the stdout should contain "foo/bar: directory"

Scenario: create a file
  Given a file named "foo/bar/example.txt" with:
    """
    hello world
    """
  When I run `cat foo/bar/example.txt`
  Then the output should contain exactly "hello world"
A tool for end-to-
end testing of web
   applications
A tool for end-to-
end testing of web
                 LIE
   applications
More feature
  … er …
 features
Feature: Posting messages to friends

 Scenario: Posting a text message
   Given I am logged in
   When I post a text message
   Then my friends should see my message

 Scenario: Posting a photo
   Given I am logged in
   When I post a photo
   Then my friends should see a thumbnail of my photo
   And clicking the thumbnail should show the photo
Feature: Posting messages to friends

 Scenario: Posting a text message
   Given I am logged in
   When I post a text message
   Then my friends should see my message

 Scenario: Posting a photo
   Given I am logged in
   When I post a photo
   Then my friends should see a thumbnail of my photo
   And clicking the thumbnail should show the photo
Feature: Posting messages to friends
  Background:
    Given I am logged in

 Scenario: Posting a text message
   When I post a text message
   Then my friends should see my message

 Scenario: Posting a photo
   When I post a photo
   Then my friends should see a thumbnail of my photo
   And clicking the thumbnail should show the photo
Scenario:
  When I add 1 widget to my order
  And I add 5 doodahs to my order
  And I add 2 thingummies to my order
  Then my basket total should be £12.34
Scenario:
  When I add the   following to my order:
    | Quantity |   Item      |
    | 1        |   widget    |
    | 5        |   doodah    |
    | 2        |   thingummy |
  Then my basket   total should be £12.34
Scenario: Simple addition
  When I calculate 2 + 2
  Then the answer should be 4

 When I calculate 10 + 5
 Then the answer should be 15

Scenario: Simple multiplication
  When I calculate 2 * 2
  Then the answer should be 4

 When I calculate 6 * 7
 Then the answer should be 42
Scenario Outline: Simple arithmetic
  When I calculate <first> <operation> <second>
  Then the answer should be <answer>

 Examples:
   | first   |   operation   |   second   |   answer   |
   | 2       |   +           |   2        |   4        |
   | 10      |   +           |   5        |   15       |
   | 2       |   *           |   2        |   4        |
   | 6       |   *           |   7        |   42       |
http://www.flickr.com/photos/yogendra174/4665988849
# language: fr
Fonctionnalité: Addition
  Afin de financer mon bonus avec l'argent des pigeons
  En tant que trader
  Je souhaite pouvoir additionner 2 chiffres

 Plan du Scénario: Addition de produits dérivés
   Soit une calculatrice
   Etant donné qu'on tape <a>
   Et qu'on tape <b>
   Lorsqu'on tape additionner
   Alors le résultat doit être <somme>

 Exemples:
   | a | b | somme |
   | 2 | 2 | 4     |
   | 2 | 3 | 5     |
# language: es
Característica: adición
  Para evitar hacer errores tontos
  Como un matemático idiota
  Quiero saber la suma de los números

 Esquema del escenario: Sumar dos números
   Dado que he introducido <entrada_1> en la calculadora
   Y que he introducido <entrada_2> en la calculadora
   Cuando oprimo el <botón>
   Entonces el resultado debe ser <resultado> en la pantalla

 Ejemplos:
   | entrada_1   |   entrada_2   |   botón   |   resultado   |
   | 20          |   30          |   add     |   50          |
   | 2           |   5           |   add     |   7           |
   | 0           |   40          |   add     |   40          |
# language: de
Funktionalität: Addition
  Um dumme Fehler zu vermeiden
  möchte ich als Matheidiot
  die Summe zweier Zahlen gesagt bekommen

 Szenariogrundriss: Zwei Zahlen hinzufügen
   Angenommen ich habe <Eingabe_1> in den Taschenrechner eingegeben
   Und ich habe <Eingabe_2> in den Taschenrechner eingegeben
   Wenn ich <Knopf> drücke
   Dann sollte das Ergebniss auf dem Bildschirm <Ausgabe> sein

 Beispiele:
   | Eingabe_1   |   Eingabe_2   |   Knopf   |   Ausgabe   |
   | 20          |   30          |   add     |   50        |
   | 2           |   5           |   add     |   7         |
   | 0           |   40          |   add     |   40        |
# language: en-lol
OH HAI: STUFFING

 MISHUN:   CUCUMBR
   I CAN   HAZ IN TEH BEGINNIN 3 CUCUMBRZ
   WEN I   EAT 2 CUCUMBRZ
   DEN I   HAS 2 CUCUMBERZ IN MAH BELLY
   AN IN   TEH END 1 CUCUMBRZ KTHXBAI
Getting the most
out of Cucumber
http://www.flickr.com/photos/oskay/2156888497
Given /^the user "(.*?)" has an account$/ do |name|
  @user = User.find_or_create_by_name name, password: "secret"
end

Given /^a logged-in user$/ do
  @user = User.find_or_create_by_name "Fred", password: "secret"
  visit "/login"
  fill_in "User name", :with => @user.name
  fill_in "Password", :with => @user.password
  click_button "Log in"
end

When /^he logs in$/ do
  visit "/login"
  fill_in "User name", with: @user.name
  fill_in "Password", with: @user.password
  click_button "Log in"
end

Then /^he should see "(.*?)"$/ do |text|
  page.should have_content(text)
end
Given /^the user "(.*?)" has an account$/ do |name|
  @user = User.find_or_create_by_name name, password: "secret"
end

Given /^a logged-in user$/ do
  @user = User.find_or_create_by_name "Fred", password: "secret"
  visit "/login"
  fill_in "User name", :with => @user.name
  fill_in "Password", :with => @user.password
  click_button "Log in"
end

When /^he logs in$/ do
  visit "/login"
  fill_in "User name", with: @user.name
  fill_in "Password", with: @user.password
  click_button "Log in"
end

Then /^he should see "(.*?)"$/ do |text|
  page.should have_content(text)
end
module LoginSteps
  def login(name, password)
    visit "/login"
    fill_in "User name", with: name
    fill_in "Password", with: password
    click_button "Log in"
  end
end

World(LoginSteps)

Given /^a logged in user$/ do
  @user = User.find_or_create_by_name name, password: "secret"
  login(@user.name, @user.password)
end

When /^he logs in$/ do
  login(@user.name, @user.password)
end
http://tooky.co.uk/2013/01/18/cucumber-and-full-stack-testing.html
http://blog.mattwynne.net/2012/05/31/hexagonal-rails-objects-values-and-hexagons/
A tool for
end-to-end testing
  of applications
A tool for
end-to-end testing
     LIE
  of applications
A tool for testing
  applications
A tool for testingRELY
               TI
  applications
        N
            EN HER
          OT EIT
            UE
         TR
http://www.flickr.com/photos/elycefeliz/3224486233
Made-up statistics

                        Identifying scenarios
                                 25%
   Automated tests
        35%




                     Agreeing steps
                         40%
$ cucumber talk.feature
Feature: DevCon talk
  In order to fill the DevCon6 schedule
  As a Cucumber user
  I want to talk about BDD with Cucumber

  Scenario: "BDD with Cucumber" talk                # talk.feature:6
    Given I have managed to prepare my talk on time # talk_steps.rb:1
    And there are people there to hear it           # talk_steps.rb:4
    When I give the talk                            # talk_steps.rb:7
    Then the audience should learn something        # talk_steps.rb:10

1 scenario (1 passed)
4 steps (4 passed)
0m0.002s
http://www.flickr.com/photos/erix/3780828260

More Related Content

PDF
A Universal Automation Framework based on BDD Cucumber and Ruby on Rails - Ph...
PDF
Behavior Driven Development - How To Start with Behat
PDF
greach 2014 marco vermeulen bdd using cucumber jvm and groovy
PDF
Story Driven Development With Cucumber
PDF
Behavior Driven Development with Cucumber
PDF
[Thong Nguyen & Trong Bui] Behavior Driven Development (BDD) and Automation T...
PDF
Cucumber Ru09 Web
PDF
Outside-in Development with Cucumber and Rspec
A Universal Automation Framework based on BDD Cucumber and Ruby on Rails - Ph...
Behavior Driven Development - How To Start with Behat
greach 2014 marco vermeulen bdd using cucumber jvm and groovy
Story Driven Development With Cucumber
Behavior Driven Development with Cucumber
[Thong Nguyen & Trong Bui] Behavior Driven Development (BDD) and Automation T...
Cucumber Ru09 Web
Outside-in Development with Cucumber and Rspec

What's hot (20)

PDF
Implementing Testing for Behavior-Driven Development Using Cucumber
PPTX
CUCUMBER - Making BDD Fun
PDF
RSpec User Stories
PPTX
BDD, Behat & Drupal
KEY
How To Write a WordPress Plugin
PPTX
Behat - Drupal South 2018
KEY
SproutCore is Awesome - HTML5 Summer DevFest
PDF
Simplifying Code: Monster to Elegant in 5 Steps
KEY
Rails Antipatterns | Open Session with Chad Pytel
PDF
Rails 3: Dashing to the Finish
KEY
You're Doing It Wrong
PPT
Selenium and Cucumber Selenium Conf 2011
PPTX
Getting Started with Test Automation: Introduction to Cucumber with Lapis Lazuli
PPTX
Writing automation tests with python selenium behave pageobjects
PPT
What you can do In WatiR
PDF
Telling Stories With RSpec
PDF
watir-webdriver
PDF
An easy guide to Plugin Development
PDF
Automated Testing with Ruby
PDF
Watir web automated tests
Implementing Testing for Behavior-Driven Development Using Cucumber
CUCUMBER - Making BDD Fun
RSpec User Stories
BDD, Behat & Drupal
How To Write a WordPress Plugin
Behat - Drupal South 2018
SproutCore is Awesome - HTML5 Summer DevFest
Simplifying Code: Monster to Elegant in 5 Steps
Rails Antipatterns | Open Session with Chad Pytel
Rails 3: Dashing to the Finish
You're Doing It Wrong
Selenium and Cucumber Selenium Conf 2011
Getting Started with Test Automation: Introduction to Cucumber with Lapis Lazuli
Writing automation tests with python selenium behave pageobjects
What you can do In WatiR
Telling Stories With RSpec
watir-webdriver
An easy guide to Plugin Development
Automated Testing with Ruby
Watir web automated tests
Ad

Viewers also liked (7)

KEY
Javasccript MV* frameworks
PDF
7li7w devcon5
KEY
TDD refresher
PDF
Testing http calls with Webmock and VCR
KEY
Adastral Park code retreat introduction
PDF
Jasmine
PPTX
Single Responsibility Principle @ Clean Code Alliance Meetup
Javasccript MV* frameworks
7li7w devcon5
TDD refresher
Testing http calls with Webmock and VCR
Adastral Park code retreat introduction
Jasmine
Single Responsibility Principle @ Clean Code Alliance Meetup
Ad

Similar to BDD with cucumber (20)

PPTX
Cucumber
KEY
Executable Requirements with Behaviour-Driven Development and Cucumber - Euro...
PDF
The LAZY Developer's Guide to BDD (with Cucumber)
PPTX
BDD testing with cucumber
PDF
ATDD BY Example With Cucumber
PDF
Aslak Hellesoy Executable User Stories R Spec Bdd
PDF
Smalltalks 2011 - Bringing BDD ideas to Pharo
PPTX
Rubyconf2016 - Solving communication problems in distributed teams with BDD
PDF
Using BDD to Solve communication problems
KEY
Tdd for BT E2E test community
PDF
Double Loop: TDD & BDD Done Right
PDF
Cucumbers & Factory Girls
PDF
Php Cookbook Solutions Examples For Php Programmers 3rd David Sklar Adam Trac...
PPTX
Behat, Test Driven Framework for BDD by Jeevan Bhushetty
PDF
Why BDD is our BFF
PPTX
Behavior Driven Development - TdT@Cluj #15
PDF
Automated UI test on mobile - with Cucumber/Calabash
KEY
Ruby on Rails Training - Module 2
PPTX
Bdd spex
PPTX
Specifications test automation pyramid public
Cucumber
Executable Requirements with Behaviour-Driven Development and Cucumber - Euro...
The LAZY Developer's Guide to BDD (with Cucumber)
BDD testing with cucumber
ATDD BY Example With Cucumber
Aslak Hellesoy Executable User Stories R Spec Bdd
Smalltalks 2011 - Bringing BDD ideas to Pharo
Rubyconf2016 - Solving communication problems in distributed teams with BDD
Using BDD to Solve communication problems
Tdd for BT E2E test community
Double Loop: TDD & BDD Done Right
Cucumbers & Factory Girls
Php Cookbook Solutions Examples For Php Programmers 3rd David Sklar Adam Trac...
Behat, Test Driven Framework for BDD by Jeevan Bhushetty
Why BDD is our BFF
Behavior Driven Development - TdT@Cluj #15
Automated UI test on mobile - with Cucumber/Calabash
Ruby on Rails Training - Module 2
Bdd spex
Specifications test automation pyramid public

More from Kerry Buckley (20)

KEY
Ruby nooks & crannies
PDF
What I learned from Seven Languages in Seven Weeks (IPRUG)
KEY
Functional ruby
KEY
MongoMapper lightning talk
KEY
KEY
PDF
The secret life of bees
PDF
Background processing
PDF
Katas, Contests and Coding Dojos
PDF
PDF
Doing REST Right
PPT
Kanban and Iterationless Working
PPT
Software Development Trends
ZIP
Kanban and Iterationless Working
PDF
TDD, BDD and mocks
PPT
Behaviour-Driven Development
PDF
REST: putting the web back in to web services
PDF
Web application testing with Selenium
Ruby nooks & crannies
What I learned from Seven Languages in Seven Weeks (IPRUG)
Functional ruby
MongoMapper lightning talk
The secret life of bees
Background processing
Katas, Contests and Coding Dojos
Doing REST Right
Kanban and Iterationless Working
Software Development Trends
Kanban and Iterationless Working
TDD, BDD and mocks
Behaviour-Driven Development
REST: putting the web back in to web services
Web application testing with Selenium

Recently uploaded (20)

PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
sap open course for s4hana steps from ECC to s4
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
KodekX | Application Modernization Development
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Machine learning based COVID-19 study performance prediction
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPT
Teaching material agriculture food technology
PDF
NewMind AI Weekly Chronicles - August'25 Week I
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Understanding_Digital_Forensics_Presentation.pptx
20250228 LYD VKU AI Blended-Learning.pptx
Spectral efficient network and resource selection model in 5G networks
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Unlocking AI with Model Context Protocol (MCP)
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
sap open course for s4hana steps from ECC to s4
“AI and Expert System Decision Support & Business Intelligence Systems”
KodekX | Application Modernization Development
Per capita expenditure prediction using model stacking based on satellite ima...
Machine learning based COVID-19 study performance prediction
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Teaching material agriculture food technology
NewMind AI Weekly Chronicles - August'25 Week I

BDD with cucumber

  • 1. Behaviour-driven development with Cucumber Kerry Buckley BT DevCon6, 4 February 2013 http://www.flickr.com/photos/yogendra174/4665988849
  • 3. A developer tool for end-to-end testing of ruby web applications
  • 4. A developer tool for end-to-end testing of ruby web applications LIE
  • 6. Feature: DevCon talk In order to fill the DevCon6 schedule As a Cucumber user I want to talk about BDD with Cucumber Scenario: "BDD with Cucumber" talk Given I have managed to prepare a talk And there are people there to hear it When I give the talk Then the audience should learn something
  • 7. Feature: DevCon talk In order to fill the DevCon6 schedule As a Cucumber user I want to talk about BDD with Cucumber Scenario: "BDD with Cucumber" talk Given I have managed to prepare a talk And there are people there to hear it When I give the talk Then the audience should learn something
  • 8. Feature: DevCon talk In order to fill the DevCon6 schedule As a Cucumber user I want to talk about BDD with Cucumber Scenario: "BDD with Cucumber" talk Given I have managed to prepare a talk And there are people there to hear it When I give the talk Then the audience should learn something
  • 9. Feature: DevCon talk In order to fill the DevCon6 schedule As a Cucumber user I want to talk about BDD with Cucumber Scenario: "BDD with Cucumber" talk Given I have managed to prepare a talk And there are people there to hear it When I give the talk Then the audience should learn something
  • 10. Feature: DevCon talk In order to fill the DevCon6 schedule As a Cucumber user I want to talk about BDD with Cucumber Scenario: "BDD with Cucumber" talk Given I have managed to prepare a talk And there are people there to hear it When I give the talk Then the audience should learn something
  • 11. Feature: Withdraw cash from account Scenario: Successful withdrawal Given I have £100 in my account When I request a withdrawal of £20 Then I should receive £20 And my balance should be £80
  • 12. $ cucumber withdraw_cash.feature Feature: Withdraw cash from account Scenario: Successful withdrawal # withdraw_cash.feature:3 Given I have £100 in my account # withdraw_cash.feature:4 When I request a withdrawal of £20 # withdraw_cash.feature:5 Then I should receive £20 # withdraw_cash.feature:6 And my balance should be £80 # withdraw_cash.feature:7 1 scenario (1 undefined) 4 steps (4 undefined) 0m0.002s You can implement step definitions for undefined steps with these snippets: Given /^I have £(d+) in my account$/ do |arg1| pending # express the regexp above with the code you wish you had end ...
  • 13. Scenario: Successful login Given a user "Fred" with password "secret" When I go to the login page And I fill in "User name" with "Fred" And I fill in "Password" with "secret" And I press "Log in" Then I should see "Welcome, Fred"
  • 14. Scenario: Adding a CaaS Linux Service in a production (or test) environment Given a fred production environment exists And I am on the last deployment page When I select "CaaS Linux Service" from "Add a new" And I press "Add service" And I fill in the following: | Role | FTP Server | | Application Installed Software | None | And I select "SC3 (redside)" from "Security Domain" And I select "2" from "Virtual CPUs" And I select "2" from "Virtual Memory" And I select "OEL 5u6 32bit" from "Operating System" And I select "None" from "MaaS(EMB) MQ Client" And I select "None" from "Oracle Client" And I check "Netbackup Client" And I check "XFB Client" And I check "BT Hunter Client" And I check "BTBPTM Client" And I check "Web Tier" And I press "Save" Then I should be on the last deployment page And I should see "Service saved" And I should see ...
  • 16. Scenario: Successful login Given a user "Fred" with password "secret" When I go to the login page And I fill in "User name" with "Fred" And I fill in "Password" with "secret" And I press "Log in" Then I should see "Welcome, Fred"
  • 17. Scenario: User is greeted upon login Given the user "Fred" has an account When he logs in Then he should see "Welcome, Fred"
  • 18. Given /^the user "(.*?)" has an account$/ do |name| @user = User.find_or_create_by_name name, password: "secret" end When /^he logs in$/ do visit "/login" fill_in "User name", with: @user.name fill_in "Password", with: @user.password click_button "Log in" end Then /^he should see "(.*?)"$/ do |text| page.should have_content(text) end
  • 19. Scenario: User is greeted upon login Given the user "Fred" has an account When he logs in Then he should see "Welcome, Fred" Scenario: Secure pages require login When I visit a secure page as a guest Then I should be asked to log in When I log in with a valid account Then I should see the secure page
  • 21. Feature: My awesome system Scenario: Using the system Given the system exists When I use it Then everything should work perfectly
  • 22. A developer tool for end-to-end testing of web applications
  • 23. A developer tool for LIE end-to-end testing of web applications
  • 24. Scenario: create a dir Given a directory named "foo/bar" When I run `file foo/bar` Then the stdout should contain "foo/bar: directory" Scenario: create a file Given a file named "foo/bar/example.txt" with: """ hello world """ When I run `cat foo/bar/example.txt` Then the output should contain exactly "hello world"
  • 25. A tool for end-to- end testing of web applications
  • 26. A tool for end-to- end testing of web LIE applications
  • 27. More feature … er … features
  • 28. Feature: Posting messages to friends Scenario: Posting a text message Given I am logged in When I post a text message Then my friends should see my message Scenario: Posting a photo Given I am logged in When I post a photo Then my friends should see a thumbnail of my photo And clicking the thumbnail should show the photo
  • 29. Feature: Posting messages to friends Scenario: Posting a text message Given I am logged in When I post a text message Then my friends should see my message Scenario: Posting a photo Given I am logged in When I post a photo Then my friends should see a thumbnail of my photo And clicking the thumbnail should show the photo
  • 30. Feature: Posting messages to friends Background: Given I am logged in Scenario: Posting a text message When I post a text message Then my friends should see my message Scenario: Posting a photo When I post a photo Then my friends should see a thumbnail of my photo And clicking the thumbnail should show the photo
  • 31. Scenario: When I add 1 widget to my order And I add 5 doodahs to my order And I add 2 thingummies to my order Then my basket total should be £12.34
  • 32. Scenario: When I add the following to my order: | Quantity | Item | | 1 | widget | | 5 | doodah | | 2 | thingummy | Then my basket total should be £12.34
  • 33. Scenario: Simple addition When I calculate 2 + 2 Then the answer should be 4 When I calculate 10 + 5 Then the answer should be 15 Scenario: Simple multiplication When I calculate 2 * 2 Then the answer should be 4 When I calculate 6 * 7 Then the answer should be 42
  • 34. Scenario Outline: Simple arithmetic When I calculate <first> <operation> <second> Then the answer should be <answer> Examples: | first | operation | second | answer | | 2 | + | 2 | 4 | | 10 | + | 5 | 15 | | 2 | * | 2 | 4 | | 6 | * | 7 | 42 |
  • 36. # language: fr Fonctionnalité: Addition Afin de financer mon bonus avec l'argent des pigeons En tant que trader Je souhaite pouvoir additionner 2 chiffres Plan du Scénario: Addition de produits dérivés Soit une calculatrice Etant donné qu'on tape <a> Et qu'on tape <b> Lorsqu'on tape additionner Alors le résultat doit être <somme> Exemples: | a | b | somme | | 2 | 2 | 4 | | 2 | 3 | 5 |
  • 37. # language: es Característica: adición Para evitar hacer errores tontos Como un matemático idiota Quiero saber la suma de los números Esquema del escenario: Sumar dos números Dado que he introducido <entrada_1> en la calculadora Y que he introducido <entrada_2> en la calculadora Cuando oprimo el <botón> Entonces el resultado debe ser <resultado> en la pantalla Ejemplos: | entrada_1 | entrada_2 | botón | resultado | | 20 | 30 | add | 50 | | 2 | 5 | add | 7 | | 0 | 40 | add | 40 |
  • 38. # language: de Funktionalität: Addition Um dumme Fehler zu vermeiden möchte ich als Matheidiot die Summe zweier Zahlen gesagt bekommen Szenariogrundriss: Zwei Zahlen hinzufügen Angenommen ich habe <Eingabe_1> in den Taschenrechner eingegeben Und ich habe <Eingabe_2> in den Taschenrechner eingegeben Wenn ich <Knopf> drücke Dann sollte das Ergebniss auf dem Bildschirm <Ausgabe> sein Beispiele: | Eingabe_1 | Eingabe_2 | Knopf | Ausgabe | | 20 | 30 | add | 50 | | 2 | 5 | add | 7 | | 0 | 40 | add | 40 |
  • 39. # language: en-lol OH HAI: STUFFING MISHUN: CUCUMBR I CAN HAZ IN TEH BEGINNIN 3 CUCUMBRZ WEN I EAT 2 CUCUMBRZ DEN I HAS 2 CUCUMBERZ IN MAH BELLY AN IN TEH END 1 CUCUMBRZ KTHXBAI
  • 40. Getting the most out of Cucumber
  • 42. Given /^the user "(.*?)" has an account$/ do |name| @user = User.find_or_create_by_name name, password: "secret" end Given /^a logged-in user$/ do @user = User.find_or_create_by_name "Fred", password: "secret" visit "/login" fill_in "User name", :with => @user.name fill_in "Password", :with => @user.password click_button "Log in" end When /^he logs in$/ do visit "/login" fill_in "User name", with: @user.name fill_in "Password", with: @user.password click_button "Log in" end Then /^he should see "(.*?)"$/ do |text| page.should have_content(text) end
  • 43. Given /^the user "(.*?)" has an account$/ do |name| @user = User.find_or_create_by_name name, password: "secret" end Given /^a logged-in user$/ do @user = User.find_or_create_by_name "Fred", password: "secret" visit "/login" fill_in "User name", :with => @user.name fill_in "Password", :with => @user.password click_button "Log in" end When /^he logs in$/ do visit "/login" fill_in "User name", with: @user.name fill_in "Password", with: @user.password click_button "Log in" end Then /^he should see "(.*?)"$/ do |text| page.should have_content(text) end
  • 44. module LoginSteps def login(name, password) visit "/login" fill_in "User name", with: name fill_in "Password", with: password click_button "Log in" end end World(LoginSteps) Given /^a logged in user$/ do @user = User.find_or_create_by_name name, password: "secret" login(@user.name, @user.password) end When /^he logs in$/ do login(@user.name, @user.password) end
  • 47. A tool for end-to-end testing of applications
  • 48. A tool for end-to-end testing LIE of applications
  • 49. A tool for testing applications
  • 50. A tool for testingRELY TI applications N EN HER OT EIT UE TR
  • 52. Made-up statistics Identifying scenarios 25% Automated tests 35% Agreeing steps 40%
  • 53. $ cucumber talk.feature Feature: DevCon talk In order to fill the DevCon6 schedule As a Cucumber user I want to talk about BDD with Cucumber Scenario: "BDD with Cucumber" talk # talk.feature:6 Given I have managed to prepare my talk on time # talk_steps.rb:1 And there are people there to hear it # talk_steps.rb:4 When I give the talk # talk_steps.rb:7 Then the audience should learn something # talk_steps.rb:10 1 scenario (1 passed) 4 steps (4 passed) 0m0.002s