Theory
Theory
Testers can write Test scripts without having in-depth knowledge of programming
Plugins are faster as compared to Selenium
Supports various programming languages
Code can be reused
Simple and quick setup
Flexible with different software platforms like Selenium, Ruby on Rails, Watir, Spring
framework, and so forth
Testers must have prior experience in TDD (Test-driven Development) to work in BDD
BDD approach may be ineffective if the requirements are not correctly analyzed
Testers must have sufficient technical skills
GIVEN: Defines precondition for the test. For example, if you want to verify that a
company logo is displaying, the precondition to verify the logo is displaying would be
that the user is at the Home Page.
Here is an example:
Then I should see the Facebook logo on the top leftStep definitions are Java methods
with a set of Java code that links to one or more Gherkin feature files. When a feature
file is executed, it looks for a matching “step definitions” step.
A Cucumber runner class is one of the many mechanisms used to run a Cucumber
feature file. It uses the Junit runner class to run the files.
Runner class acts as a link between the step definition class and the feature files. It is a
class where you provide the path for both feature files and step definitions.
With the Runner class you have the option to run either one single feature or multiple
feature files.
@RunWith annotations: This is a Junit annotation that specifies which runner has to
run execute this class. Cucumber.class is a parameter. Junit knows that this is a
Cucumber test.
@CucumberOptions: This is an important annotation to run a Cucumber feature
file. features is a parameter that provides the path of the Feature file. Glue, another
parameter, provides the path of the step definitions class. plugin, generates an HTML
report on the provided location.
Cucumber is a very good BDD tool that provides testers a lot of flexibility and has large
community support. It’s not helpful to use the Cucumber framework when step
definitions grow a lot because it gets challenging to manage them.
Behavior Driven Development (BDD) Framework enables software testers to complete test
scripting in plain English. BDD mainly focuses on the behavior of the product and user
acceptance criteria. Cucumber is one of the best tools used to develop in the BDD
Framework. The Cucumber tool is used for development in various languages like Ruby,
Python, and JavaScript. It uses Gherkin, an ordinary language parser, that permits writing
scripts in English that can be easily understood. It is used to run the acceptance tests
written in BDD. Here we will walk you through what BDD, and why and how you
should be using Cucumber in BDD.
BDD scenarios are written in plain English, which is easy to understand by everyone
involved in the project, from stakeholders to project team members.
Scenarios are written specifically to each functionality which gives clarity for product
development and testing.
Be it manual or automated, testing becomes very easy as the test cases or the test scripts
can be easily identified from the feature files.
The maintenance of the framework is simple.
BDD also acts as project documentation for all modules and functionalities.
It serves as the automated test for test scripts and documentation for the project itself.
Test scenarios are clearly organized in the feature files.
Tests are written based on user stories and system behavior corresponding to the user
story in English using annotations like Given, When, Then.
Code can be written in any language like Java, Python, Perl, etc.
Features of Cucumber
Gherkin: In BDD, the scenarios are written in a language named Gherkin. Gherkin uses a
simple syntax and keywords are easily understood by anyone like business users and
stakeholders. The feature files which store the scenarios under test are written in Gherkin.
Gherkin files should have the .feature file extension. Every feature file contains an
individual scenario under test.
Features: Feature is a use case that describes the module under test. The feature is
composed of the following details.
Scenario Outline: Used where test data is replaced with multiple sets of data for each run
of a test script.
Scenario 1
3. runTest.java
Let us see the same implementation using multiple sets of data in the below scenario:
Scenario 2
Below is the Loginmethods.java class for multiple data sets to check the login
functionality for multiple users.
1. Loginmethods.java
driver.findElement(By.id("user-name")).isDisplayed();
driver.findElement(By.id("user-name")).sendKeys(ar1); }
Here \"([^\"]*)\"$" denotes the user expression for multiple sets of data
2. LoginPage.feature.java
Feature file: Steps for the scenario is written in this
class:
Scenario Outline is the tag name used for testing multiple sets of data.
Here the “<username>” and <”password”> are replaced with the username and
password combinations mentioned in the Examples section
Examples:
| username | password |
| standard_user | secret_sauce |
| performance_glitch_user | secret_sauce|
3. runTest.java
Gherkin is a readable business language that allows you to define business activity
without getting bogged down in implementation specifics. It's a domain-specific
language for defining specs tests in Cucumber format. It describes use cases in plain
English and helps users to remove logic elements from behaviour testing.
Feature: The Feature keyword's aim is to collect relevant scenarios and provide a high-
level description of a software feature.
Rule: The Rule keyword is used to express a single business rule that should be
followed. It adds to the information about a feature.
Example: This is a practical illustration of a business rule. It comprises a series of steps.
Given: The given steps are used to describe the system's initial context - the scenario's
scene. It usually refers to an event that occurred in the past.
When: When describing an occurrence or an action, When is employed. It could be a
user interacting with the system or an event generated by another system.
Then: Then steps are employed to indicate an anticipated outcome, or result.
Background: A background helps you to give the situations that follow it some
context. It can have one or more Given steps, which are executed prior to each
scenario but after any Before hooks.
Scenario is a fundamental Gherkin structure. Every scenario begins with the keyword
"Scenario:" (or a localized version of it) and ends with a scenario title. Every feature can
have one or more scenarios, each of which has one or more steps.
Consider the situation when we need to run a test scenario multiple times. Assume we
need to ensure that the login feature is functional for all types of subscribers. This
necessitates repeating the login functionality scenario. Copying and pasting the
identical instructions to just re-run the code does not appear to be a good approach.
Gherkin adds another framework, the scenario outline, to help with this. The scenario
outline is similar to scenario, with the exception that several inputs are provided.
Example:-
9. What are the basic requirements to run Cucumber Web test cases?
1. The compiler and the development kit for the programming language we will
be using. Example: JDK and JRE for using Java as our programming language.
2. An IDE (Integrated Development Environment) wherein we can write our code.
Example: Eclipse.
3. Build tools so as to do tasks such as compiling code, packaging code to a jar,
creating source code. Example: Maven, Gradle.
Step definitions connect Gherkin steps to programming code. The mapping between
each step of the scenario defined in the feature file and a code of the function to be
executed is stored in the steps definition file. A step definition carries out the action
that should be performed by the step. So step definitions hard-wire the specification
to the implementation.
or
Step definition maps the Test Case Steps in the feature files to code. It executes the
steps on Application Under Test and checks the outcomes against expected results. In
order to execute step definition it must match the given component in a feature
An annotation is a type of text that has been pre-defined and has a specified meaning.
It tells the compiler/interpreter what to do when the program runs. The annotations on
Cucumber are as follows:
Feature File: It has plain text descriptions of single or numerous test situations.
Keywords like Then, When, Background, Scenario Outline, Feature, And, But, and so on
are used in the tests. As a result, it's a file that keeps track of features and their
descriptions.
Step Definition File: It has the extension .java. It essentially acts as a translator
between the test scenario steps provided in the feature file and the automation code.
Cucumber searches the step definition file and executes the relevant functions that are
assigned to that step when it runs a step described in the feature file.
TestRunner: .java is the file extension for this file. It connects the feature file and the
step definition file. It allows the user to run one or more feature files at the same time.
It contains the locations of the step definition and feature files.
14. How do you comment the code in Cucumber? What is the importance of
comments?
For Step Definition File, if you're using Java as a platform, start your comments with
"/."
In the case of a feature file, we only need to type # before starting our comment.
Hooks are code blocks that execute before or after each Cucumber scenario in the
execution cycle. This enables us to better control the development workflow and
decrease code redundancy. Setting up the web driver and terminating the web driver
session resembles a test setup. When dealing with different scenarios, it's best to do
the setup and clean up only once. Hooks are used to bringing optimization.
The methods @Before and @After can be used to define hooks anywhere in the
project or step definition layers. Before hook is executed before any other test
situations, and after the hook is executed after all test scenarios have been completed.
16. What are tags in Cucumber and why are they important?
When we only have one, two, or maybe five situations in a feature file, it appears to be
simple. In reality, however, this does not occur. In a single feature file, we may have 10,
20, or even more scenarios for each feature under test. They could reflect various
purposes (smoke test/regression test), perspectives (developer/QA/BA), and statuses
(ready for execution/work in progress).
Tags in cucumber provide a way to run scenarios in a specific sequence from a runner
file. Each situation can be labeled with a useful tag. Later, in the runner file, we may
specify which tag (and hence which scenario(s)) Cucumber should run. “@” is the first
character in a tag. Any relevant content after "@" can be used to define your tag.
Example - ‘@InitialTest’
If the dry run value is true, Cucumber will check all steps in the Feature file. Within the
Step Definition file, it will also check the implementation code of steps in the Feature
file.
If any of the steps in the Feature file is missing its implementation in the Step
Definition file, a message is thrown. The @CucumberOptions has a dry run parameter
that is used to configure the test parameters.
When testing a feature, cucumber profiles make it simple to define groupings of tests
in a feature file so that we can choose to execute only a subset of them rather than all
of them. It was created to help people save time. In a cucumber.yml file, the user can
reuse commonly used cucumber flags.
The test harness in Cucumber helps in separating the task of establishing the context
and interacting with the browser from cleaning up the step definition files. It gathers
the stubs, drivers, and other tools needed to enable test execution automation in
testing.
To run a set of tests either within the framework or with the help of the test harness
To enter data into the program being tested.
Debugging becomes more flexible and supported.
To record the outputs of the software under test
To keep track of the test results (pass/fail) for each test.
Aids developers in determining code coverage at the code level.
RSpec and Cucumber are two examples of testing frameworks. Traditional Unit Testing
is used by RSpec. It refers to the practice of testing a section of an application
separately from the remaining part of the application. As a result, your model performs
what it's expected to do, the controller does what it's expected to do, and so on. Both
RSpec and Cucumber are used for Acceptance Testing, also known as ATDD, BDD, and
other terms.
The following are the major differences between RSpec and Cucumber:-
The fundamental distinction between RSpec and Cucumber is the element of business
readability.
Unit testing is the primary purpose of RSpec. Cucumber, on the other hand, is primarily
utilized in behavior-driven development. It can be used for System and Integration
Testing as well.
Cucumber separates the specs or features from the test code, allowing product owners
to provide or review the specification without having to walk through the code.
RSpec includes a similar method, but instead of elaborating a step with a Describe, it
executes the statement using the business specification. This method is easier for
developers to use, but a little more difficult for non-technical people.
Open-source testing tools, Selenium and Cucumber are both used for functional
testing. However, there are some distinctions between them.
Cucumber and Selenium are two widely used testing frameworks and
technologies. Selenium is widely used for functional testing in many organizations.
These companies use Cucumber in conjunction with Selenium because Cucumber
makes the application flow easier to read and comprehend. The most important
advantage of combining Cucumber and Selenium is that it allows developers to build
test cases in simple feature files that managers, non-technical stakeholders, and
business analysts can understand. It allows you to develop tests in Gherkin, a human-
readable programming language. Java,.NET, PHP, Python, Perl, and other
programming languages are supported by the Selenium-Cucumber framework.
A feature file in Cucumber can include a maximum of 10 scenarios. This quantity can
differ from one project to the next and from one organization to the next. It's
advisable to keep the number of scenarios in the feature file to a minimum.
First, all the test cases are written. Based on your requirements, you must create an
automated test case.
Carry out all of the tests: Carry out these automated test cases on the code that has
been developed so far.
Modify the code for that test case: You must develop the code to make that test
casework as intended if it fails throughout this step.
Rerun the test cases: Now you must rerun the test cases to ensure that all of the
previously developed test cases have been implemented.
Modularize your code as follows: This is a step that can be skipped. However,
refactoring your code to make it more readable and reusable is recommended. That is
why it is necessary.
For new test scenarios, repeat steps 1–5: This is the final phase in the process. You
must now repeat the process for the remaining test cases till all of them have been
implemented.
TDD BDD
Test-Driven Development (TDD) is a
method of developing software that is BDD is an acronym for behavior-driven
driven by tests. This means that the development. It's a behavior-based
developers must first write the test development approach.
cases before writing the code.
Given-When-Then steps are used to write BDD
TDD tests are developed in a variety of
tests in a human-readable fashion. Non-
programming languages, including
technical people may read and comprehend
Java,.NET, Python, Ruby, and others.
these tests as well.
The scope is the key distinction
BDD, on the other hand, is a collaborative
between TDD and BDD. TDD is a
methodology.
development methodology.
When a test fails because the specified Creating an executable specification that fails
function does not exist, TDD because the feature isn't available, then
recommends writing the simplest code writing the simplest code possible to make the
possible to pass the test, then spec pass in BDD. This process is repeated
TDD BDD
reworking to remove duplication, and until a release candidate is ready to be
so on. delivered.
Users or testers write automated specifications
The test cases are written by the
in BDD, which are then wired to the code
developers in TDD.
under test by developers.
Because TDD tests are written in specific
programming languages, they are Non-programmers can read BDD tests since
difficult to interpret by non- they are written in a human-readable format.
programmers.
28. What is the use of the Options tag in the Cucumber Framework?
The Options tag is a part of the TestRunner file in the Cucumber framework, and it
takes the form of an annotation named @CucumberOptions.
1. Feature: The path to the feature file is specified by the feature option.
2. Glue: The glue argument is used to provide the step definition file's location.
Example:
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith (Cucumber.class)
@CucumberOptions (
features = "src/test/Sample/features ",
glue = {"StepDefinitionFile"}
)
public class SampleTestRunner {
}
Cucumber execution will begin at the support level. In support, it will first load the
env.rb file, then hooks.rb, and last start executing feature file scenario steps.
The Cucumber JVM Parallel Plugin, which may be used with Serenity BDD, can be used
to conduct parallel tests in Cucumber. The plugin will look in the src/test/resources
directory for feature files. After that, it will create runners for each file.
32. What are some of the prerequisites that you should consider while building a
Selenium Cucumber automation application?
Determine the type of application you'll be testing. Is it a Web app, a mobile app, or a
desktop application?
Is there a need for backend testing? Databases or SDKs, for example.
Is it necessary to run the app through an internationalization test?
It must include a report that allows you to track down a problem with minimal effort.
It must be able to generate parametrization tests automatically.
Any setup-related settings or global attributes should be defined in a config file.
To segregate the functionality, use abstraction at every level.
Despite the fact that Cucumber and JBehave have the same goal in mind, acceptance
tests are two quite distinct frameworks:
34. How can you run a selected test from a group of tests in Cucumber?
We may execute a single test from a set of tests in the Cucumber framework using the
tags idea. This is found in the TestRunner file's @CucumberOptions section. With the
use of the @t<agname> keyword, we may tag a scenario in the feature file. A scenario
can have one or more tags within the feature file. We can separate test scenarios with
the assistance of tagging. We must pass the <tagname> value within the tags
argument to execute a selected test in Cucumber, and we must pass the <~tagname>
value within the tags parameter to exclude a test from running.
The Scenario Outline in a feature file should be accompanied by the Examples part. This
consists of the multiple data sets to be passed at runtime.
The Examples section in the feature file should have headings that match with the
variables in the Scenario Outline followed by (|) symbol. Each row below the heading
represents a set of data. So if there are two rows after heading, the test scenario shall
run two times with the two different sets of data.
Let us consider the feature file having the Feature New User Registration described
previously. Next let us now create a step definition file corresponding to that feature file.
1 import cucumber.api.java.en.Given;
2 import cucumber.api.java.en.Then;
3 public class ParameterizationWithExample {
4 @Given ("^User navigates to Registration Page$")
5 public void navigate_to_registration () {
6 System.out.println ("Navigation to registration is done");
7 }
8
9 @Then ("^User inputs \"(.*)\" and \"(.*)\" and \"(.*)\"$")
10 public void user_input (String fname, String lname, String email){
11 System.out.println ("First name is: " + fname);
12 System.out.println ("Last name is: " + lname);
13 System.out.println ("Email is: " + email); }
14 }
In the above example, we have passed three values Firstname, Lastname and Email at
the run time without requiring to hardcode test data inside the step definition file. With
the help of User inputs \”(.*)\” and \”(.*)\” and \”(.*)\ statement, Cucumber
understands that there are three runtime parameters. Also, three parameters are passed
as arguments to the user_input method.
In the above example, we have passed the URL directly within the Given statement in
the feature file.
1 import cucumber.api.java.en.Given;
2 import cucumber.api.java.en.Then;
3 public class ParameterizationWithoutExample {
4 @Given ("^Navigate to \"([^\"]*)\"$")
5 public void navigate (String url) {
6 System.out.println ("URL is: " + url); }
7 }
In the above example, we have passed one
value https://www.softwaretestingmaterial.com/ that executes at run time without
requiring to hardcode test data inside the step definition file. With the help of Navigate
to \”([^\”]*)\ statement, Cucumber understands that there is one runtime parameter.
Also, this parameter is passed as an argument to the navigate method.
Interview Questions
Q #1) Explain Cucumber shortly.
Answer: Cucumber is a tool that is based on Behavior Driven Development (BDD)
methodology.
The main aim of the Behavior Driven Development framework is to make various project
roles such as Business Analysts, Quality Assurance, Developers, etc., understand the
application without diving deep into the technical aspects.
Q #2) What language is used by Cucumber?
Answer: Gherkin is the language that is used by the Cucumber tool. It is a simple
English representation of the application behavior. Gherkin language uses several
keywords to describe the behavior of applications such as Feature, Scenario, Scenario
Outline, Given, When, Then, etc.
Q #3) What is meant by a feature file?
Answer: A feature file must provide a high-level description of an Application Under
Test (AUT). The first line of the feature file must start with the keyword ‘Feature’
followed by the description of the application under test.
A feature file may include multiple scenarios within the same file. A feature file has the
extension .feature.
Q #4) What are the various keywords that are used in Cucumber for writing a
scenario?
Answer: Mentioned below are the keywords that are used for writing a scenario:
Given
When
Then
And
Q #5) What is the purpose of a Scenario Outline in Cucumber?
Answer: Scenario outline is a way of parameterization of scenarios. This is ideally used
when the same scenario needs to be executed for multiple sets of data, however, the
test steps remain the same. Scenario Outline must be followed by the keyword
‘Examples’, which specify the set of values for each parameter.
Q #6) What programming language is used by Cucumber?
Answer: Cucumber tool provides support for multiple programming languages such as
Java, .Net, Ruby etc. It can also be integrated with multiple tools such as Selenium,
Capybara, etc.
Q #7) What is the purpose of the Step Definition file in Cucumber?
Answer: A step definition file in Cucumber is used to segregate the feature files from
the underlying code. Each step of the feature file can be mapped to a corresponding
method on the Step Definition file.
While feature files are written in an easily understandable language like, Gherkin, Step
Definition files are written in programming languages such as Java, .Net, Ruby, etc.
Example:
|filename|
|file1|
|file2|
Q #12) What is the limit for the maximum number of scenarios that can be
included in the feature file?
Answer: A feature file can contain a maximum of 10 scenarios, but the number can
vary from project to project and from one organization to another. But it is generally
advisable to limit the number of scenarios included in the feature file.
Q #13) What is the use of Background keyword in Cucumber?
Answer: Background keyword is used to group multiple given statements into a single
group. This is generally used when the same set of given statements are repeated in
each scenario of the feature file.
Q #14) What symbol is used for parameterization in Cucumber?
Answer: Pipe symbol (|) is used to specify one or more parameter values in a feature
file.
Q #15) What is the purpose of Examples keyword in Cucumber?
Ans: Examples keyword is used to specify values for each parameter used in the
scenario. Scenario Outline keyword must always be followed by the keyword Examples.
Q #16) What is the file extension for a feature file?
Answer: File Extension for a feature file is .feature. A feature file is ideally written in a
notepad file and is saved with the extension feature.
Q #17) Provide an example of a step definition file in Cucumber.
Answer: Step definition corresponding to the step “Open Chrome browser and launch
the application” may look like the code mentioned below:
@Given("^Open Chrome browser and launch the application$")
driver.manage().window().maximize();
driver.get("www.facebook.com");
Q #23) Explain the purpose of keywords that are used for writing a scenario in
Cucumber.
Answer:
“Given” keyword is used to specify a precondition for the scenario.
“When” keyword is used to specify an operation to be performed.
“Then” keyword is used to specify the expected result of a performed action.
“And” keyword is used to join one or more statements together into a single
statement.
Q #24) What is the name of the plugin that is used to integrate Eclipse with
Cucumber?
Answer: Cucumber Natural Plugin is the plugin that is used to integrate Eclipse with
Cucumber.
Q #25) What is the meaning of the TestRunner class in Cucumber?
Answer: TestRunner class is used to provide the link between the feature file and the
step definition file. The next question provides a sample representation of how the
TestRunner class will look like. A TestRunner class is generally an empty class with no
class definition.
Q #26) What is the use of glue property under the Cucumber Options tag?
Answer: Glue property is used to let the Cucumber framework identify the location of
step definition files.