Cucumber Features
Cucumber uses a Given–When–Then style to describe expected behavior in a human-readable way. Each test suite is written as a Feature, and each test case within it is a Scenario.
Scenarios
A Scenario defines a single, concrete example of how a system should behave.
Feature: Putting items into a box
This feature demonstrates how to put items into a box.
Scenario: Putting apples into a box
Given An empty box
When I place 2 x "apple" in it
Then The box contains 2 items
Each Given–When–Then step describes:
Given – the initial context or precondition
When – an action performed by the user or system
Then – the expected outcome or assertion
If there are additional steps, you can use And and But to make them more readable. Alternatively, you can use the universal * keyword.
Feature: Putting items into a box
This feature demonstrates how to put items into a box.
Scenario: Adding multiple items
Given An empty box
When I place 2 x "apple" in it
And I place 2 x "orange" in it
Then The box contains 4 items
But I remove the last item
* The box contains 3 items
Scenarios are independent from one another and are executed in isolation.
Scenario Outline / Scenario Template
A Scenario Outline (or Scenario Template) allows you to run the same scenario multiple times with different data sets.
Placeholders inside the scenario are replaced by values defined in the Examples (or Scenarios) table.
Scenario Outline: Putting items into a box
Given An empty box
When I place <count> x "<item>" in it
Then The box contains <count> items
Examples:
| item | count |
| apple | 2 |
| orange | 3 |
Each row in the Examples table executes the scenario once,
substituting the placeholders <item> and <count> accordingly. Empty cells are considered as empty strings.
Background
A Background section defines steps that are executed before each scenario in a feature. It is useful for common setup tasks shared by multiple scenarios.
Feature: Each box has at least one apple
Background:
Given An empty box
When I place 1 x "apple" in it
Scenario: Adding oranges
When I place 2 x "orange" in it
Then The box contains 3 items
Scenario: Adding bananas
When I place 3 x "banana" in it
Then The box contains 4 items
Doc Strings
Doc Strings pass multi-line text blocks directly into your step definition as a single string. They are often used for messages, JSON snippets, or configuration data. See Doc Strings for details on how to access them in C++.
Scenario: A fragile box
Given An empty box with additional information
"""
Fragile!
Please handle with care!
"""
Data Tables
Data Tables provide structured input for a step. CWT-Cucumber supports several formats. See Datatables for examples of how to handle tables in step definitions.
Option 1: Raw table – no header or descriptive column.
Given An empty box
When I add all items using the *raw()* function:
| apple | 3 |
| banana | 6 |
Then The box contains 9 items
Option 2: Hashes – include a header row to describe each column.
Given An empty box
When I add all items using the *hashes()* function:
| ITEM | QUANTITY |
| apple | 2 |
| banana | 5 |
Then The box contains 7 items
Option 3: Key/Value pairs – the first column defines the key, the second the value.
Given An empty box
When I add the following item using the *rows_hash()* function:
| ITEM | really good apples |
| QUANTITY | 3 |
Then The box contains 3 items
Rules
Rules provide an additional layer of structure within a feature file. They group related scenarios under a shared business rule or condition.
Feature: The Rules keyword
Rule: This is a rule that helps structure the feature file.
You can also use 'Example:' as a synonym for 'Scenario'.
Example: An example is equivalent to a scenario
Given An empty box
When I place 1 x "apple" in it
Then The box contains 1 item
Rule: Another rule for grouping related examples
# ...
# Additional scenarios or examples can follow here
Languages
CWT-Cucumber follows the official Gherkin syntax and supports multiple languages for feature files. Currently supported languages are:
English (default)
Spanish
German
If you would like to add another language, please open an issue in this repository.
You can specify the language at the top of a feature file using the # language: directive.
Find all Gherkin keywords in each supported language in the
official Cucumber documentation.
# language: de
Funktionalität: Gegenstände in eine Kiste legen
Szenario: Äpfel in eine Kiste legen
Gegeben sei Eine leere Kiste
Wenn Ich 2 x "Apfel" hineinlege
Dann Enthält die Kiste 2 Gegenstände
Note
The step definitions must be implemented in the same target language.