Parallel Execution
Gwen can execute features and scenarios in parallel threads.
Maximum threads
The maximum number of parallel threads can be controlled through the following setting:
gwen.parallel.maxThreads
- By default this is set to
auto
, meaning that one thread will execute on each available CPU core (for example: 8 threads would execute on an 8 core machine) - This can be set to a desired number of threads
- When less than the number of available cores, the remaining cores will be free
- When greater than the number of available cores, more than one thread may execute on some or all cores (use judiciously)
- By default this is set to
Parallel feature execution
Since v1.0.0
Features will run in parallel if you specify:
- the
--parallel
launch option and your state level is set tofeature
When maxThreads
is auto
(default)
- If you launch Gwen on an 8 core machine with the
--parallel
option passing in 8 feature files (or a single directory containing 8 feature files), then the 8 features will run in parallel across the cores. If you instead provide 9 features, then 8 of them will execute in parallel and the remaining feature execution will be deferred until one of those completes.
Parallel scenario execution
Since v2.22.1
Scenarios will run in parallel if you specify:
- the
--parallel
launch option and your state level is set toscenario
When maxThreads
is auto
(default)
- If you launch Gwen on a 8 core machine with the
--parallel
option passing in many feature files (or a single directory containing many feature files), then at most 8 scenarios will run in parallel across the cores at any one time. If there are a total of 9 scenarios, then 8 of them will execute in parallel and the remaining scenario execution be deferred until one of those completes.
Parallel scenario outline examples
Since v3.69.0
The Parallel
annotation can be used on examples to force each entry to run in parallel
Scenario Outline: I load items from data files
When I add a <Status> "<Item>" item
@Parallel
Examples: add item
| Item | Status |
| Walk the dog | pending |
| Get the milk | done |
| Feed the cat | pending |
It can also be used in conjunction with Examples
annotations
@Examples("data/items.csv")
@Parallel
Scenario Outline: I load items from data files
When I add a <Status> "<Item>" item
Restrictions
TheParallel
annotation:
- Cannot be used in a nested manner (an error will be raised on any such detection)
- Will come to effect only when Gwen is invoked without the
--parallel
launch option (i.e: when no other parallel execution is taking place), and will be implicity removed otherwise.
Staggering
Since v1.1.0
An optional ramp up interval can be configured to stagger parallel executions.
Example:
A 5 second interval would stagger parallel feature executions like this over 4 cores:
time 00 05 10 15 seconds
│ │ │ │
core 1 │<── feature 1a ──>|<── feature 1b ──> ..
core 2 │ │<── feature 2a ──>|<── feature 2b ──> ..
core 3 │ │ │<── feature 3a ──>|<── feature 3b ──> ..
core 4 │ │ │ │<── feature 4a ──>|<── feature 4b ──> ..