Published on

Introduce you Cucumber architecture and how to use Cucumber

Published in: Technology, Self Improvement


  1. 1. What is Cucumber?Cucumber is a tool that executes plain-text functional descriptions asautomated tests.Here is an example:BDD: Behavior Driven Development
  2. 2. Running test cases
  3. 3. How Cucumber works: Gherkin• Gherkin is the language that Cucumber understands.• It is a Business Readable, Domain Specific Language that lets you describe software’s behaviour without detailing how that behaviour is implemented.• So everyone can write Gherkin.• Gherkin serves two purposes – documentation and automated tests. The third is a bonus feature – when it yells in red it’s talking to you, telling you what code you should write.
  4. 4. Gherkin Example1: Feature: Some terse yet descriptive text of what is desired2: In order to realize a named business value3: As an explicit system actor4: I want to gain some beneficial outcome which furthers the goal5:6: Scenario: Some determinable business situation7: Given some precondition8: And some other precondition9: When some action by the actor10: And some other action11: And yet another action12: Then some testable outcome is achieved13: And something else we can check happens too14:15: Scenario: A different situation16: ...
  5. 5. Gherkin Documents
  6. 6. How Cucumber works: Backgrounder• Language: Ruby, etc.Gherkin:Scenario: Users can enter an invoice item . . . Then I enter a product quantity of 5Step definition:When /enter a product quantity of (d+)/ do |quantity| pending "TODO: Do we need to have a product code passed as well?"End
  7. 7. How Cucumber works: Capybara• Capybara helps you test Rails and Rack applications by simulating how a real user would interact with your app.• It is agnostic about the driver running your tests and comes with Rack::Test and Selenium support built in.
  8. 8. Capybara ExampleWhen /^I sign in$/ do within("#session") do fill_in Login’, with => fill_in Password’, with => password end click_link Sign inend
  9. 9. Capybara DSL• Navigation: visit• Interact: attach_file, text, check, choose, click_link_or_button, click_button, click_link, field_labeled, fill_in, select, unselect, uncheck, click_on• Find: all, first, find, find_button, find_by_id, find_field, find_link• Query: has_content?, has_css?, has_no_content?, has_no_css?, has_no_xpath?, has_xpath?, has_link?, has_no_link?, has_button, has_no_button?, has_field?, has_no_field?, has_checked_field?, has_unchecked_field?, has_no_table?, has_table?, has_select?, has_no_select?, has_selector?, has_no_selector?, has_no_checked_field?, has_no_unchecked_field?• Debugging: save_page, save_and_open_page
  10. 10. Capybara Drivers• RackTest – Default driver – Doesn’t support Javascript• Webkit – Uses QtWebKit to start a rendering engine process. – Execute Javascript• Selenium – Start a Firefox to test
  11. 11. Cucumber Architecture Cucumber Gherkin Backgrounder Given When Then Ruby code Capybara DSL DriversNavigating Interaction Querying Finding Scoping Debugging RackTest Webkit Selenium Firefox …
  12. 12. Install cucumber in Rails 2.3gem "capybara", "1.1.1"gem "cucumber", "1.1.0"gem "cucumber-rails", "0.3.2”$ script/generate cucumber --capybaracreate config/cucumber.yml #cucumber command paramscreate config/environments/cucumber.rb #cucumber rails envcreate script/cucumbercreate features/step_definitions #step definitionscreate features/step_definitions/web_steps.rb #generalstep definitionscreate features/support #cucumber configure filescreate features/support/paths.rb #cucumber path configurecreate features/support/env.rb #cucumber env configurecreate lib/tasks #cucumber rake taskscreate lib/tasks/cucumber.rake
  13. 13. Write your first cucumber test caseIt’s really, really recommended that you write your features by hand – in collaborationwith your customer / business analyst / domain expert / interaction designer.However, to get you started you can use the feature generator to generate the firstfew features:$ script/generate feature Frooble name:string color:string description:textexists features/step_definitionscreate features/manage_froobles.feature #gherkin, user storiescreate features/step_definitions/frooble_steps.rb #ruby, step definitions
  14. 14. How to use Cucumber?1. Describe behaviour in plain text2. Write a step definition in Ruby3. Run and watch it fail4. Write code to make the step pass5. Run again and see the step pass6. Repeat 2-5 until green like a cuke7. Repeat 1-6 until the money runs out
  15. 15. More info?