SlideShare ist ein Scribd-Unternehmen logo
1 von 6
Cucumber Testing         Installation



1. Add the gems dependencies in your application’s Gemfile, for group :test only:

                                               Gemfile
1    group :test do

2

3    # RSpec

4    gem 'rspec'

     gem 'rspec-rails'
5

6
     # Cucumber
7
     gem 'cucumber-rails', :require => false
8
     gem 'database_cleaner'
9

10
     end
11



2. Run the bundle command to install the gems:

    bundle install



3. If this is the first time you run tests on your application, don’t forget to
first prepare your test database:

rake db:migrate

rake db:test:load



4. Those frameworks need little configuration files. They can be generated with
the following commands:
> rails generate rspec:install

create .rspec

create spec

create spec/spec_helper.rb

 and
> rails generate cucumber:install

create config/cucumber.yml

create script/cucumber

chmod script/cucumber

create features/step_definitions

create features/support

create features/support/env.rb

exist lib/tasks

create lib/tasks/cucumber.rake

gsub config/database.yml

gsub config/database.yml

force config/database.yml




 5. Finally you can write a nice test. This tutorial will make use of Cucumber to
 write and run tests.
 Therefore I define my test in my own language in a features file:

                                 features/test_cases/simple.feature
1 Feature: Simple testing

2

3 Scenario: Arriving on home page gives a 200 response code

4 When I visit the page "/"
    Then the response code should be "200"
5
And I can run my test by invoking cucumber:
> cucumber



Using the default profile...

Feature: Simple testing



Scenario: Arriving on home page gives a 200 response code # featurestest_casessimple.feature:3

When I visit the page "/" #



featurestest_casessimple.feature:4

Undefined step: "I visit the page "/"" (Cucumber::Undefined)

featurestest_casessimple.feature:4:in `When I visit the page "/"'

Then the response code should be "200" # featurestest_casessimple.feature:5

Undefined step: "the response code should be "200"" (Cucumber::Undefined)

featurestest_casessimple.feature:5:in `Then the response code should be "200"'



1 scenario (1 undefined)

2 steps (2 undefined)

0m0.020s



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



When /^I visit the page "(.*?)"$/ do |arg1|

pending # express the regexp above with the code you wish you had

end



Then /^the response code should be "(.*?)"$/ do |arg1|

pending # express the regexp above with the code you wish you had

end
You can see a colored output (on Windows, you will need to use Ansicon to see
the colors), much more sexier than usual Test::Unit output.
Currently our test is failing, as Cucumber does not know yet what to do with our
language. As you can see at the end of the output, it suggests a nice code
snippet with a regular expression to implement the missing definition.
This is a real time saver: all you have to do is copy/paste this code snippet to
your definition file, and implement it.




7. So next step is to implement the missing definition, done in a definitions
file:

                        features/step_definitions/main_steps.rb
When /^I visit the page "(.*?)"$/ do |iPagePath|

visit iPagePath

end



Then /^the response code should be "(.*?)"$/ do |iResponseCode|

page.status_code.should == iResponseCode.to_i

end




Now you can re-run your cucumber test suite and admire the result:
> cucumber

Using the default profile...

Feature: Simple testing



Scenario: Arriving on home page gives a 200 response code # featurestest_casessimple.feature:3

When I visit the page "/" # features/step_definitions/main_steps.rb:1

Then the response code should be "200" # features/step_definitions/main_steps.rb:5



1 scenario (1 passed)

2 steps (2 passed)

0m2.551s




 With these you can already write a great test suite, very easy to maintain with
 reusable and understandable sentences in your tests. Developers working after
 you on your project will thank you!

Weitere ähnliche Inhalte

Was ist angesagt?

Object Oriented JavaScript
Object Oriented JavaScriptObject Oriented JavaScript
Object Oriented JavaScript
techwhizbang
 

Was ist angesagt? (20)

Drupal8 Front-end Automated Testing
Drupal8 Front-end Automated TestingDrupal8 Front-end Automated Testing
Drupal8 Front-end Automated Testing
 
Build a bot workshop async primer - php[tek]
Build a bot workshop  async primer - php[tek]Build a bot workshop  async primer - php[tek]
Build a bot workshop async primer - php[tek]
 
Ember.js Module Loading
Ember.js Module LoadingEmber.js Module Loading
Ember.js Module Loading
 
Palestra VCR
Palestra VCRPalestra VCR
Palestra VCR
 
Object Oriented JavaScript
Object Oriented JavaScriptObject Oriented JavaScript
Object Oriented JavaScript
 
Story Driven Development With Cucumber
Story Driven Development With CucumberStory Driven Development With Cucumber
Story Driven Development With Cucumber
 
Selenium sandwich-3: Being where you aren't.
Selenium sandwich-3: Being where you aren't.Selenium sandwich-3: Being where you aren't.
Selenium sandwich-3: Being where you aren't.
 
Multi tenant/lang application with Ruby on Rails
Multi tenant/lang application with Ruby on RailsMulti tenant/lang application with Ruby on Rails
Multi tenant/lang application with Ruby on Rails
 
Ansible 2.0
Ansible 2.0Ansible 2.0
Ansible 2.0
 
Modularizing Rails Apps with Cells
Modularizing Rails Apps with CellsModularizing Rails Apps with Cells
Modularizing Rails Apps with Cells
 
ZendCon 2017 - Build a Bot Workshop - Async Primer
ZendCon 2017 - Build a Bot Workshop - Async PrimerZendCon 2017 - Build a Bot Workshop - Async Primer
ZendCon 2017 - Build a Bot Workshop - Async Primer
 
Mistakes I've made in Ruby and Rails
Mistakes I've made in Ruby and RailsMistakes I've made in Ruby and Rails
Mistakes I've made in Ruby and Rails
 
Mistakes
MistakesMistakes
Mistakes
 
RESTful web services
RESTful web servicesRESTful web services
RESTful web services
 
Perlbal Tutorial
Perlbal TutorialPerlbal Tutorial
Perlbal Tutorial
 
Sinatra
SinatraSinatra
Sinatra
 
Mojolicious - A new hope
Mojolicious - A new hopeMojolicious - A new hope
Mojolicious - A new hope
 
RSpec User Stories
RSpec User StoriesRSpec User Stories
RSpec User Stories
 
Inside Bokete: Web Application with Mojolicious and others
Inside Bokete:  Web Application with Mojolicious and othersInside Bokete:  Web Application with Mojolicious and others
Inside Bokete: Web Application with Mojolicious and others
 
Mojo as a_client
Mojo as a_clientMojo as a_client
Mojo as a_client
 

Ähnlich wie Cucumber testing

Migrating Legacy Rails Apps to Rails 3
Migrating Legacy Rails Apps to Rails 3Migrating Legacy Rails Apps to Rails 3
Migrating Legacy Rails Apps to Rails 3
Clinton Dreisbach
 
A tour on ruby and friends
A tour on ruby and friendsA tour on ruby and friends
A tour on ruby and friends
旻琦 潘
 
20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev
Frank Rousseau
 
Behaviour driven infrastructure
Behaviour driven infrastructureBehaviour driven infrastructure
Behaviour driven infrastructure
Lindsay Holmwood
 

Ähnlich wie Cucumber testing (20)

Migrating Legacy Rails Apps to Rails 3
Migrating Legacy Rails Apps to Rails 3Migrating Legacy Rails Apps to Rails 3
Migrating Legacy Rails Apps to Rails 3
 
Automation Zaman Now
Automation Zaman NowAutomation Zaman Now
Automation Zaman Now
 
Unit Testing for Great Justice
Unit Testing for Great JusticeUnit Testing for Great Justice
Unit Testing for Great Justice
 
Unit Testing Lots of Perl
Unit Testing Lots of PerlUnit Testing Lots of Perl
Unit Testing Lots of Perl
 
Cucumber & BDD
Cucumber & BDDCucumber & BDD
Cucumber & BDD
 
Metadata-driven Testing
Metadata-driven TestingMetadata-driven Testing
Metadata-driven Testing
 
Automatisation in development and testing - within budget
Automatisation in development and testing - within budgetAutomatisation in development and testing - within budget
Automatisation in development and testing - within budget
 
A tour on ruby and friends
A tour on ruby and friendsA tour on ruby and friends
A tour on ruby and friends
 
Introduce cucumber
Introduce cucumberIntroduce cucumber
Introduce cucumber
 
How To Test Everything
How To Test EverythingHow To Test Everything
How To Test Everything
 
infra-as-code
infra-as-codeinfra-as-code
infra-as-code
 
20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev
 
Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...
Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...
Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...
 
Capistrano
CapistranoCapistrano
Capistrano
 
Refactor Dance - Puppet Labs 'Best Practices'
Refactor Dance - Puppet Labs 'Best Practices'Refactor Dance - Puppet Labs 'Best Practices'
Refactor Dance - Puppet Labs 'Best Practices'
 
Behaviour driven infrastructure
Behaviour driven infrastructureBehaviour driven infrastructure
Behaviour driven infrastructure
 
Fixing Growing Pains With Puppet Data Patterns
Fixing Growing Pains With Puppet Data PatternsFixing Growing Pains With Puppet Data Patterns
Fixing Growing Pains With Puppet Data Patterns
 
Test Driven Development with Chef
Test Driven Development with ChefTest Driven Development with Chef
Test Driven Development with Chef
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
End-to-end web-testing in ruby ecosystem
End-to-end web-testing in ruby ecosystemEnd-to-end web-testing in ruby ecosystem
End-to-end web-testing in ruby ecosystem
 

Kürzlich hochgeladen

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Kürzlich hochgeladen (20)

The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 

Cucumber testing

  • 1. Cucumber Testing Installation 1. Add the gems dependencies in your application’s Gemfile, for group :test only: Gemfile 1 group :test do 2 3 # RSpec 4 gem 'rspec' gem 'rspec-rails' 5 6 # Cucumber 7 gem 'cucumber-rails', :require => false 8 gem 'database_cleaner' 9 10 end 11 2. Run the bundle command to install the gems: bundle install 3. If this is the first time you run tests on your application, don’t forget to first prepare your test database: rake db:migrate rake db:test:load 4. Those frameworks need little configuration files. They can be generated with the following commands:
  • 2. > rails generate rspec:install create .rspec create spec create spec/spec_helper.rb and > rails generate cucumber:install create config/cucumber.yml create script/cucumber chmod script/cucumber create features/step_definitions create features/support create features/support/env.rb exist lib/tasks create lib/tasks/cucumber.rake gsub config/database.yml gsub config/database.yml force config/database.yml 5. Finally you can write a nice test. This tutorial will make use of Cucumber to write and run tests. Therefore I define my test in my own language in a features file: features/test_cases/simple.feature 1 Feature: Simple testing 2 3 Scenario: Arriving on home page gives a 200 response code 4 When I visit the page "/" Then the response code should be "200" 5
  • 3. And I can run my test by invoking cucumber:
  • 4. > cucumber Using the default profile... Feature: Simple testing Scenario: Arriving on home page gives a 200 response code # featurestest_casessimple.feature:3 When I visit the page "/" # featurestest_casessimple.feature:4 Undefined step: "I visit the page "/"" (Cucumber::Undefined) featurestest_casessimple.feature:4:in `When I visit the page "/"' Then the response code should be "200" # featurestest_casessimple.feature:5 Undefined step: "the response code should be "200"" (Cucumber::Undefined) featurestest_casessimple.feature:5:in `Then the response code should be "200"' 1 scenario (1 undefined) 2 steps (2 undefined) 0m0.020s You can implement step definitions for undefined steps with these snippets: When /^I visit the page "(.*?)"$/ do |arg1| pending # express the regexp above with the code you wish you had end Then /^the response code should be "(.*?)"$/ do |arg1| pending # express the regexp above with the code you wish you had end
  • 5. You can see a colored output (on Windows, you will need to use Ansicon to see the colors), much more sexier than usual Test::Unit output. Currently our test is failing, as Cucumber does not know yet what to do with our language. As you can see at the end of the output, it suggests a nice code snippet with a regular expression to implement the missing definition. This is a real time saver: all you have to do is copy/paste this code snippet to your definition file, and implement it. 7. So next step is to implement the missing definition, done in a definitions file: features/step_definitions/main_steps.rb When /^I visit the page "(.*?)"$/ do |iPagePath| visit iPagePath end Then /^the response code should be "(.*?)"$/ do |iResponseCode| page.status_code.should == iResponseCode.to_i end Now you can re-run your cucumber test suite and admire the result:
  • 6. > cucumber Using the default profile... Feature: Simple testing Scenario: Arriving on home page gives a 200 response code # featurestest_casessimple.feature:3 When I visit the page "/" # features/step_definitions/main_steps.rb:1 Then the response code should be "200" # features/step_definitions/main_steps.rb:5 1 scenario (1 passed) 2 steps (2 passed) 0m2.551s With these you can already write a great test suite, very easy to maintain with reusable and understandable sentences in your tests. Developers working after you on your project will thank you!