Cucumber Introduction:
Cucumber is a tool based on Behavior Driven Development (BDD) framework which is used to write acceptance tests for web application. It allows automation of functional validation in easily readable and understandable format (like plain English) to Business Analysts, Developers, Testers, etc.
Cucumber tools also support Behavior Driven Development (BDD).It offers a way to write tests that anybody can understand, regardless of their technical knowledge.
In BDD, users (business analysts, product owners) first write scenarios or acceptance tests that describes the behavior of the system from the customer's perspective, for review and sign-off by the product owners before developers write their codes.
Cucumber use Ruby programming language.
What are the benefits?
- It is helpful to involve business stakeholders who can't easily read code
- Cucumber focuses on end-user experience
- Style of writing tests allow for easier reuse of code in the tests
- Quick and easy set up and execution
- Efficient tool for testing
Cucumber feature files can serve as a good document for all. There are many other tools like JBehave which also support BDD framework. Initially Cucumber was implemented in Ruby and then extended to Java framework. Both the tools support native JUnit.
Behavior Driven Development is extension of Test Driven Development and it is used to test the system rather than testing the particular piece of code. We will discuss more about the BDD and style of writing BDD tests.
Cucumber can be used along with Selenium, Watir, and Capybara etc. Cucumber supports many other languages like Perl, PHP, Python, .Net etc. In this tutorial we will concentrate on Cucumber with Java as a language.
Cucumber Basics:
In order to understand cucumber we need to know all the features of cucumber and its usage.
#1) Feature Files:
Feature files are essential part of cucumber which is used to write test automation steps or acceptance tests. This can be used as live document. The steps are the application specification. All the feature files ends with .feature extension.
Sample feature file:
Feature: Login Functionality Feature
In order to ensure Login Functionality works,
I want to run the cucumber test to verify it is working
Scenario: Login Functionality
Given user navigates to abc.COM
When user logs in using Username as “USER” and Password “PASSWORD”
Then login should be successful
Scenario: Login Functionality
Given user navigates to abc.COM
When user logs in using Username as “USER1″ and Password “PASSWORD1″
Then error message should be thrown
#2) Feature:
This gives information about the high level business functionality (Refer to previous example) and the purpose of Application under test. Everybody should be able to understand the intent of feature file by reading the first Feature step. This part is basically kept brief.
#3) Scenario:
Basically a scenario represents a particular functionality which is under test. By seeing the scenario user should be able to understand the intent behind the scenario and what the test is all about. Each scenario should follow given, when and then format. This language is called as “gherkin”.
- Given: As mentioned above, given specifies the pre-conditions. It is basically a known state.
- When: This is used when some action is to be performed. As in above example we have seen when the user tries to log in using username and password, it becomes an action.
- Then: The expected outcome or result should be placed here. For Instance: verify the login is successful, successful page navigation.
- Background: Whenever any step is required to perform in each scenario then those steps needs to be placed in Background. For Instance: If user needs to clear database before each scenario then those steps can be put in background.
- And: And is used to combine two or more same type of action.
Example:
Feature: Login Functionality Feature
Scenario: Login Functionality
Given user navigates to abc.COM
When user logs in using Username as “USER”
And password as “password”
Then login should be successful
And Home page should be displayed
Example of Background:
Background:
Given user logged in as databases administrator
And all the junk values are cleared
#4) Scenario Outline:
Scenario outlines are used when same test has to be performed with different data set. Let’s take the same example. We have to test login functionality with multiple different set of username and password.
Feature: Login Functionality Feature
In order to ensure Login Functionality works,
I want to run the cucumber test to verify it is working
Scenario Outline: Login Functionality
Given user navigates to abc.COM
When user logs in using Username as <
username> and Password <
password>
Then login should be successful
Examples:|username |password |
|Tom |password1 |
|Harry |password2 |
|Jerry |password3 |
Note:
- As shown in above example column names are passed as parameter to When statement.
- In place of Scenario, you have to use Scenario Outline.
- Examples are used to pass different arguments in tabular format. Vertical pipes are used to separate two different columns. Example can contain many different columns.
#5) Tags:
Cucumber by default runs all scenarios in all the feature files. In real time projects there could be hundreds of feature file which are not required to run at all times.
For instance: Feature files related to smoke test need not run all the time. So if you mention a tag as smokeTest in each feature file which is related to smoke test and run cucumber test with @SmokeTest tag . Cucumber will run only those feature files specific to given tags. Please follow the below example. You can specify multiple tags in one feature file.
Example of use of single tags:
@SmokeTestFeature: Login Functionality Feature
In order to ensure Login Functionality works,
I want to run the cucumber test to verify it is working
Scenario Outline: Login Functionality
Given user navigates to abc.COM
When user logs in using Username as <
username> and Password <
password>
Then login should be successful