Skip to content

Commit ab96284

Browse files
committed
[JUnit Platform] Document fixed.max-pool-size property
With JUnit 5.9.2 we pull in junit-team/junit5#3044 which makes it possible to limit the maximum number of threads used while executing in parallel. Closes: #2677
1 parent bf1fa8f commit ab96284

File tree

2 files changed

+92
-85
lines changed

2 files changed

+92
-85
lines changed

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1313

1414
### Added
1515
- [Spring] Support Spring Boot 3 and Spring 6 ([#2644](https://github.com/cucumber/cucumber-jvm/pull/2644) M.P. Korstanje)
16+
- [JUnit Platform] Support `cucumber.execution.parallel.config.config.fixed.max-pool-size` ()
1617

1718
### Changed
1819
- [Core] Use a [message based JUnit XML Formatter](https://github.com/cucumber/cucumber-junit-xml-formatter) ([#2638](https://github.com/cucumber/cucumber-jvm/pull/2638) M.P. Korstanje)
@@ -21,6 +22,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2122

2223
### Fixed
2324
- [Core] Improve test step creation performance ([#2666](https://github.com/cucumber/cucumber-jvm/issues/2666), Julien Kronegg)
25+
- [JUnit Platform] Use JUnit Platform 1.9.2 (JUnit Jupiter 5.9.2)
26+
2427

2528
## [7.10.1] - 2022-12-16
2629
### Fixed

cucumber-junit-platform-engine/README.md

+89-85
Original file line numberDiff line numberDiff line change
@@ -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`
200202
implementation through `cucumber.execution.parallel.config.custom.class`.
201203

202204
If no strategy is specified Cucumber will use the `dynamic` strategy with a
203205
factor 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
302304
documentation 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

Comments
 (0)