Cucumber uses Gherkin syntax to describe your software's behaviors in structured natural language.
As such Cucumber is not a test framework (a common misunderstanding), but a system documentation framework, not very different from others like Use Case Scenario. The common misunderstanding is due to the fact Cucumber documentation can be automated in order to ensure it reflects the real system behavior.
A Cucumber documentation suite is composed of Features
, each describing a feature of your software, written in Gherkin and hosted in its own file.
By organizing those files into a directory structure you can group and organize features:
Each Feature
is a plain text file composed by an optional, unstructured, purely informational introductory section and one or more Scenarios
, each one representing a usage condition or use case.
Example:
Feature: Documentation
As a StackOverflow user or visitor
I want to access the documentation section
Scenario: search documentation on Stack Overflow
Given I am on StackOverflow
And I go to the Documentation section
When I search for "cucumber"
And I follow the link to "cucumber"
Then I should see documentation for "cucumber"
Each line beginning with Given, When, And, But or Then is called a Step
.
Any step can begin with any of those words regardless of order, but it is conventional to use them in the most natural way possible.
Features can also be organized via Tags
, annotations the editor can put on a Feature
or a Scenario
to further categorize it.
Executability of a Feature is achieved via glue code which can be written in many different languages (Java, Ruby, Scala, C/C++): each Step
is matched against the glue code in order to identify Step Definitions
(commonly abbreviated to StepDef) via regular expressions.
Every Step
can have only one associated Step Definition
.
When a Feature
is executed each composing Scenario
is executed, meaning each StepDef matching the Step
s in every Scenario
gets executed.