@@ -194,18 +194,20 @@ strategy.
194194* ` dynamic ` : Computes the desired parallelism as ` <available cores> ` *
195195` cucumber.execution.parallel.config.dynamic.factor ` .
196196
197- * ` fixed ` : Set the desired parallelism to ` cucumber.execution.parallel.config.fixed.parallelism ` .
197+ * ` fixed ` : Set ` cucumber.execution.parallel.config.fixed.parallelism ` to the
198+ desired parallelism and ` cucumber.execution.parallel.config.config.fixed.max-pool-size `
199+ to the maximum pool size of the underlying ForkJoin pool.
198200
199201* ` custom ` : Specify a custom ` ParallelExecutionConfigurationStrategy `
200202implementation through ` cucumber.execution.parallel.config.custom.class ` .
201203
202204If no strategy is specified Cucumber will use the ` dynamic ` strategy with a
203205factor of ` 1 ` .
204206
205- Note: Cucumber does not guarantee that the number of concurrently executing
206- tests will not exceed the configured parallelism. The underlying ` ForkJoinPool `
207- used to execute scenarios may spawn additional threads. To obtain such
208- guarantees us a custom parallel configuration strategy .
207+ Note: While ` .fixed.max-pool-size ` effectively limits the maximum number of
208+ concurrent threads, Cucumber does not guarantee that the number of concurrently
209+ executing scenarios will not exceed this. See (junit5/ # 3108 ) [ https://github.com/junit-team/junit5/issues/3108 ]
210+ for details .
209211
210212### Exclusive Resources ###
211213
@@ -302,86 +304,88 @@ documentation
302304documentation on Cucumber properties see [ Constants] ( src/main/java/io/cucumber/junit/platform/engine/Constants.java ) .
303305
304306```
305- cucumber.ansi-colors.disabled= # true or false.
306- # default: false
307-
308- cucumber.filter.name= # a regular expression.
309- # only scenarios with matching names are executed.
310- # example: ^Hello (World|Cucumber)$
311- # note: To ensure consistent reports between Cucumber and
312- # JUnit 5 prefer using JUnit 5s discovery request filters
313- # or JUnit 5 tag expressions instead.
314-
315- cucumber.features= # comma separated paths to feature files.
316- # example: path/to/example.feature, path/to/other.feature
317- # note: When used any discovery selectors from the JUnit
318- # Platform will be ignored. Use with caution and care.
319-
320- cucumber.filter.tags= # a cucumber tag expression.
321- # only scenarios with matching tags are executed.
322- # example: @Cucumber and not (@Gherkin or @Zucchini)
323- # note: To ensure consistent reports between Cucumber and
324- # JUnit 5 prefer using JUnit 5s discovery request filters
325- # or JUnit 5 tag expressions instead.
326-
327- cucumber.glue= # comma separated package names.
328- # example: com.example.glue
329-
330- cucumber.junit-platform.naming-strategy= # long or short.
331- # default: short
332- # include parent descriptor name in test descriptor.
333-
334- cucumber.plugin= # comma separated plugin strings.
335- # example: pretty, json:path/to/report.json
336-
337- cucumber.object-factory= # object factory class name.
338- # example: com.example.MyObjectFactory
339-
340- cucumber.publish.enabled # true or false.
341- # default: false
342- # enable publishing of test results
343-
344- cucumber.publish.quiet # true or false.
345- # default: false
346- # suppress publish banner after test execution.
347-
348- cucumber.publish.token # any string value.
349- # publish authenticated test results.
350-
351- cucumber.snippet-type= # underscore or camelcase.
352- # default: underscore
353-
354- cucumber.execution.dry-run= # true or false.
355- # default: false
356-
357- cucumber.execution.execution-mode.feature= # same_thread or concurrent
358- # default: concurrent
359- # same_thread - executes scenarios sequentially in the
360- # same thread as the parent feature
361- # concurrent - executes scenarios concurrently on any
362- # available thread
363-
364- cucumber.execution.parallel.enabled= # true or false.
365- # default: false
366-
367- cucumber.execution.parallel.config.strategy= # dynamic, fixed or custom.
368- # default: dynamic
369-
370- cucumber.execution.parallel.config.fixed.parallelism= # positive integer.
371- # example: 4
372-
373- cucumber.execution.parallel.config.dynamic.factor= # positive double.
374- # default: 1.0
375-
376- cucumber.execution.parallel.config.custom.class= # class name.
377- # example: com.example.MyCustomParallelStrategy
378-
379- cucumber.execution.exclusive-resources.<tag-name>.read-write= # a comma separated list of strings
380- # example: resource-a, resource-b.
381-
382- cucumber.execution.exclusive-resources.<tag-name>.read= # a comma separated list of strings
383- # example: resource-a, resource-b
384-
307+ cucumber.ansi-colors.disabled= # true or false.
308+ # default: false
309+
310+ cucumber.filter.name= # a regular expression.
311+ # only scenarios with matching names are executed.
312+ # example: ^Hello (World|Cucumber)$
313+ # note: To ensure consistent reports between Cucumber and
314+ # JUnit 5 prefer using JUnit 5s discovery request filters
315+ # or JUnit 5 tag expressions instead.
316+
317+ cucumber.features= # comma separated paths to feature files.
318+ # example: path/to/example.feature, path/to/other.feature
319+ # note: When used any discovery selectors from the JUnit
320+ # Platform will be ignored. Use with caution and care.
321+
322+ cucumber.filter.tags= # a cucumber tag expression.
323+ # only scenarios with matching tags are executed.
324+ # example: @Cucumber and not (@Gherkin or @Zucchini)
325+ # note: To ensure consistent reports between Cucumber and
326+ # JUnit 5 prefer using JUnit 5s discovery request filters
327+ # or JUnit 5 tag expressions instead.
328+
329+ cucumber.glue= # comma separated package names.
330+ # example: com.example.glue
331+
332+ cucumber.junit-platform.naming-strategy= # long or short.
333+ # default: short
334+ # include parent descriptor name in test descriptor.
335+
336+ cucumber.plugin= # comma separated plugin strings.
337+ # example: pretty, json:path/to/report.json
338+
339+ cucumber.object-factory= # object factory class name.
340+ # example: com.example.MyObjectFactory
341+
342+ cucumber.publish.enabled # true or false.
343+ # default: false
344+ # enable publishing of test results
345+
346+ cucumber.publish.quiet # true or false.
347+ # default: false
348+ # suppress publish banner after test execution.
349+
350+ cucumber.publish.token # any string value.
351+ # publish authenticated test results.
352+
353+ cucumber.snippet-type= # underscore or camelcase.
354+ # default: underscore
355+
356+ cucumber.execution.dry-run= # true or false.
357+ # default: false
358+
359+ cucumber.execution.execution-mode.feature= # same_thread or concurrent
360+ # default: concurrent
361+ # same_thread - executes scenarios sequentially in the
362+ # same thread as the parent feature
363+ # concurrent - executes scenarios concurrently on any
364+ # available thread
365+
366+ cucumber.execution.parallel.enabled= # true or false.
367+ # default: false
368+
369+ cucumber.execution.parallel.config.strategy= # dynamic, fixed or custom.
370+ # default: dynamic
371+
372+ cucumber.execution.parallel.config.fixed.parallelism= # positive integer.
373+ # example: 4
374+
375+ cucumber.execution.parallel.config.config.fixed.max-pool-size= # positive integer.
376+ # example: 4
377+
378+ cucumber.execution.parallel.config.dynamic.factor= # positive double.
379+ # default: 1.0
380+
381+ cucumber.execution.parallel.config.custom.class= # class name.
382+ # example: com.example.MyCustomParallelStrategy
383+
384+ cucumber.execution.exclusive-resources.<tag-name>.read-write= # a comma separated list of strings
385+ # example: resource-a, resource-b.
386+
387+ cucumber.execution.exclusive-resources.<tag-name>.read= # a comma separated list of strings
388+ # example: resource-a, resource-b
385389```
386390
387391## Supported Discovery Selectors and Filters ##
0 commit comments