Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Cucumber-Rails

Integration Testing Tool for Rails 3
About Cucumber...
Acceptance Test Driven Development
Collaborative effort between the customer and the delivery
team
Cucum...
Why Cucumber ?? ( Advantages )


Clarity of Requirements



Communication Medium used viz Gherkin syntax



Self explan...
Cucumber Advantages (Cont...)





Can be used with other programming languages as
well.
Works with Ruby, Java, .NET, Fl...
Relation between Rspec & Cucumber !

Cucumber

RSpec
Cucumber

- High Level Features
- Integration Testing

- Granular Lev...
Main Elements of Cucumber !!
Cucumber

Features

Step Definitions

.feature

.rb
Example

e.g user.feature

User

e.g user...
Features...
Example:
Feature: pay bill on-line
- In order to reduce the time I spend paying bills
- As a bank customer wit...
Step Definitions...
Given /^checking account with $(d+)$/ do |bill_amount|
# Ruby code here
End
Given /^a payee named (.*)...
Step Definitions (Continued...)
When I pay the bill to XYZ
Then I should have $13 remaining in my checking account
And the...
Cucumber with Rails 3...
gem 'cucumber-rails'
group :test do
gem 'cucumber-rails'
end

Bootstrap Cucumber
rails g cucumber...
”Background” feature
Feature: User Authorization
As an account owner
I should be able to view all the reports for my accou...
Scenario Outlines
Feature: User Authorization
As an account owner
I should be able to view all the reports & employees for...
Tags...


To organize your features and schenario's
@signin
Feature: Signin

@signup
Feature: Signup

@login
Scenario: Lo...
Execution...


All Features
> cucumber
OR
> cucumber features/



Particular Feature
> cucumber features/<file>.feature
...
Cucumber.yml
default: --format progress features
html_report: --format html --out=features_report.html features
signup_rep...
Ambiguous Steps !!
Scenario1: Different users view reports
When the user "xyz" access the reports page

Feature

Then user...
Redundant Steps !!
Scenario: User ”xyz” view his reports
When the user ”xyz” access the ”reports” page
Then user ”xyz” sho...
”Spork” ( What &

Why

)



To speed up the running of an application’s tests



Preloads the Rails Environment once at ...
When to restart Spork ??




No need to restart the Spork server if there are any changes in your test
cases written und...
Get Spork working on Rails 3 & Rspec 2


Add ”Spork” gem into your Gemfile



Configure the option --drb on a new line i...
Get Spork working on Rails 3 & Cuke


Add ”Spork” gem into your Gemfile



Configure the option --drb on a new line in y...
Thank You !!
Upcoming SlideShare
Loading in …5
×

Ninad cucumber rails

455 views

Published on

Test Automation Framework for Ruby on Rails.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Ninad cucumber rails

  1. 1. Cucumber-Rails Integration Testing Tool for Rails 3
  2. 2. About Cucumber... Acceptance Test Driven Development Collaborative effort between the customer and the delivery team Cucumber Representation Requirements Cucumber Representationofof Requirements Customer Review Customer Review Automation Automation
  3. 3. Why Cucumber ?? ( Advantages )  Clarity of Requirements  Communication Medium used viz Gherkin syntax  Self explanatory notes for 3rd person.  Communication gap is overcomed.
  4. 4. Cucumber Advantages (Cont...)   Can be used with other programming languages as well. Works with Ruby, Java, .NET, Flex or web applications written in any language. It has been translated to over 40 spoken languages.
  5. 5. Relation between Rspec & Cucumber ! Cucumber RSpec Cucumber - High Level Features - Integration Testing - Granular Level - Unit Testing
  6. 6. Main Elements of Cucumber !! Cucumber Features Step Definitions .feature .rb Example e.g user.feature User e.g user.rb
  7. 7. Features... Example: Feature: pay bill on-line - In order to reduce the time I spend paying bills - As a bank customer with a checking account - I want to pay my bills on-line Scenario: pay a bill Given checking account with $50 And a payee named XYZ And a bill for $37 When I pay the bill to XYZ Then I should have $13 remaining in my checking account And the payment of $37 to XYZ should be listed in Recent Payments
  8. 8. Step Definitions... Given /^checking account with $(d+)$/ do |bill_amount| # Ruby code here End Given /^a payee named (.*)$/ do |payee_name| # Ruby code here End Given /^a bill for $(d+)$/ do |bill_amount| # Ruby code here end Given checking account with $50 And a payee named XYZ And a bill for $37
  9. 9. Step Definitions (Continued...) When I pay the bill to XYZ Then I should have $13 remaining in my checking account And the payment of $37 to XYZ should be listed in Recent Payments When /^I pay the bill to (.*)$/ do |payee_name| # Ruby code here End Then /^I should have $(d+) remaining in my checking account$/ do |bill_amount| # Ruby code here End Then /^the payment of $(d+) to (.*) should be listed in Recent Payments$/ do |amount,payee_name| # Ruby code here end
  10. 10. Cucumber with Rails 3... gem 'cucumber-rails' group :test do gem 'cucumber-rails' end Bootstrap Cucumber rails g cucumber:install - config/cucumber.yml - script/cucumber - features/step_definitions - features/support - features/support/env.rb - lib/tasks/cucumber.rake
  11. 11. ”Background” feature Feature: User Authorization As an account owner I should be able to view all the reports for my account Background: Given the user "xyz" is logged-in And has the role as "account owner" Scenario: User "xyz" view his reports When the user "xyz" access the reports page Then user "xyz" should see all his reports
  12. 12. Scenario Outlines Feature: User Authorization As an account owner I should be able to view all the reports & employees for my account Background: Given the user "xyz" is logged-in And has the role as "account owner" Scenario Outline: User "xyz" view his reports & employees When the account owner <user> access the <page> page Then account owner <user> should see <count> <page> Examples: |user|page|count| |abc|reports|500| |xyz|reports|700| |xyz|employees|20|
  13. 13. Tags...  To organize your features and schenario's @signin Feature: Signin @signup Feature: Signup @login Scenario: Login Given Credentails... When logged in Then... @signup @resourcename Scenario: Signup Given Information... When Signed up Then... @fyp Scenario: Forgot your password Given registered email When clicked on forgot your password Then email should be delivered
  14. 14. Execution...  All Features > cucumber OR > cucumber features/  Particular Feature > cucumber features/<file>.feature  Particular Test case scenario > cucumber features/ --tags @signin
  15. 15. Cucumber.yml default: --format progress features html_report: --format html --out=features_report.html features signup_report : --tags @signup features Execution: Feature: > cucumber --profile html_report > cucumber --profile signup_report @signup Scenario:ABC Given... Scenario:XYZ Given... When... When... Then... Then...
  16. 16. Ambiguous Steps !! Scenario1: Different users view reports When the user "xyz" access the reports page Feature Then user "xyz" should see all his reports When /^the user (.*) access the reports page$/ do | user_name | # Ruby code here Step-Defn End Scenario2: User ”xyz” view different pages When the user xyz access the ”reports” page Feature Then user xyz should see all his ”reports” When /^the user xyz access the (.*) page$/ do | page_name | # Ruby code here End Step-Defn
  17. 17. Redundant Steps !! Scenario: User ”xyz” view his reports When the user ”xyz” access the ”reports” page Then user ”xyz” should see all his reports Reports.feature Scenario: User ”xyz” view his transactions When the user ”xyz” access the ”transactions” page Then user ”xyz” should see all his transactions Trans.feature When /^the user (.*) access the (.*) page$/ do | user_name, page | # Ruby code here End
  18. 18. ”Spork” ( What & Why )  To speed up the running of an application’s tests  Preloads the Rails Environment once at the start   The whole Rails initialization process is skipped, saving valuable seconds off of your spec runs A little analysis reveals that execution time gets reduced by about 3.5 min or so in case of 900 examples
  19. 19. When to restart Spork ??   No need to restart the Spork server if there are any changes in your test cases written under ”model-spec” or say ”controller-spec” Need to restart the Spork server for any changes in the configuration in your application. examples: - change in Factory's - spec_helpers - spec/support/... - .rspec
  20. 20. Get Spork working on Rails 3 & Rspec 2  Add ”Spork” gem into your Gemfile  Configure the option --drb on a new line in your .rspec file  Modify your spec_helper.rb as follows: require 'spork' Spork.prefork do ENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' ... end  Finally start the ”Spork” server as :$ bundle exec spork .rspec --color --drb
  21. 21. Get Spork working on Rails 3 & Cuke  Add ”Spork” gem into your Gemfile  Configure the option --drb on a new line in your cucumber.yml file  Modify your features/support/env.rb as follows: Cucumber.yml require 'spork' Spork.prefork do pretty_format: --drb --format pretty features ENV["RAILS_ENV"] ||= 'test' require File.expand_path(File.dirname(__FILE__) + '/../../config/environment') require 'cucumber/rails/rspec' end  Finally start the ”Spork” server as : $ bundle exec spork cucumber
  22. 22. Thank You !!

×