Skip to main content

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 percentage of the total number of cores available (for example, 80% would mean that 8 threads would execute on a 10 core machine)
    • Or 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)

Parallel feature execution​

Since v1.0.0

Features will run in parallel if you specify:

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:

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

The Parallel 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 ──> ..