Writing Features¶
The standard Gherkin syntax is supported, including scenario outlines, doc strings, data tables and internationalization.
Feature¶
A feature is a single file that typically defines a single story. It has a name and an optional description, an optional background and many scenarios.
Feature: Search
As a user
I want to do a search for something not in the default categories
So that I can provide more detailed search parameters
A feature may also have tags.
Background¶
The background is an optional section that is run before every scenario and contains steps. It is used to set up fixtures common to each scenario of the feature.
A background does not have a name or tags.
If a step fails during the background the scenario will fail.
Background:
Given my location is Melbourne, Victoria
Scenario¶
Scenarios are the individual tests that make up a feature. Scenarios have a name and may optionally tags. The scenario consists of a number of steps.
If a step fails the scenario will fail.
Scenario: Check the results
When I search for "pet food" and press enter
# A step with a multiline string.
Then I should see the text:
"""
1 result found in 0.15 seconds.
"""
# A step with a table.
And I should see the results:
| Name (primaryText) | Description (secondaryText) |
| Pets Inc | Your one stop pet shop |
Scenario Outline¶
A scenario outline is a template for building scenarios from the rows of a
table named Examples
. Parameters are written in the form <Parameter>
,
where each named parameter must be present in the table.
Scenario outlines have a name and may optionally have tags.
Scenario Outline: Search is correctly escaped
When I search for "<Phrase>" and press enter
Then I should be at <URL>
Examples:
| Phrase | URL |
| pets | /search/pets |
| pet food | /search/pet%20food |
Tags¶
Feature and scenario tags are specified using the form @tag_name
and are
converted to Nose attribute tags, and can be run/excluded using -a
.
Feature: Search
@integration
Scenario: Live server works as expected
When I search for "pet food"
Then I should see >1 result
See docs for the Attribute selector plugin for more information.
Feature Loading¶
If features are not specified on the command line, Aloe will look for features in directories that are both:
- Named
features
;- Located in a directory containing packages, that is, all their parent directories have an
__init__.py
file.
For example, given the following directory structure, only
one
, three
and seven
features will be run:
one/
__init__.py
features/
one.feature
two/
three.feature
examples/
four.feature
five/
__init__.py
six/
features/
seven.feature
eight/
nine/
features/
ten.feature
four
will not be run because it is not in a directory named features
.
ten
will not be run because its parent directory, nine
, is not a
package. This prevents discovering features of dependent packages if they are
in a virtualenv inside the project directory.