SlideShare uma empresa Scribd logo
1 de 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!

Mais conteúdo relacionado

Mais procurados

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

Mais procurados (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
 

Semelhante a 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
 

Semelhante a 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
 

Último

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 

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!