Skip to main content
Version: 5.0.0 (Unmaintained)

Configuration Properties

Paramixel exposes configuration through org.paramixel.api.Configuration. Values are read through typed getters such as getString, getBoolean, and getInteger.

Configuration sources​

Use one of the factory methods:

Configuration configuration = Configuration.defaultConfiguration();
Configuration classpathOnly = Configuration.classpathConfiguration();
Configuration systemAndDefaults = Configuration.systemConfiguration();
Configuration explicit = Configuration.of(Map.of(
Configuration.RUNNER_PARALLELISM, "4"));

Configuration.defaultConfiguration() resolves classpath paramixel.properties, JVM system properties, and built-in defaults. System properties override classpath properties; built-in defaults fill unset framework keys.

Configuration.of(Map<String, String>) creates an explicit configuration from the supplied map.

Built-in keys​

paramixel.parallelism​

Default scheduler parallelism. Defaults to Runtime.getRuntime().availableProcessors().

paramixel.parallelism=8

paramixel.scheduler.queue.capacity​

Maximum number of scheduler-ready tasks and permit waiters. Default is 1024.

paramixel.scheduler.queue.capacity=2048

paramixel.ansi​

Controls ANSI escape code output in console listeners.

ValueBehavior
trueForce ANSI on
falseForce ANSI off
auto (default)Auto-detect based on terminal

paramixel.failureOnSkip​

Whether skipped results produce a failing effective status/exit code. Default is false.

paramixel.failureOnSkip=true

paramixel.failureOnAbort​

Whether aborted results produce a failing effective status/exit code. Default is true.

paramixel.failureOnAbort=false

paramixel.failIfNoTests​

Whether absence of discovered action factories produces a failing effective status/exit code. Default is false.

paramixel.failIfNoTests=true

paramixel.report.file​

Path to the per-run summary report. When unset, no report file is generated.

paramixel.report.file=target/paramixel/paramixel.json

Report format is inferred from the file extension: .json, .xml, .html, or plain text for .log, .txt, and other extensions.

paramixel.match.package.regex​

Regex for filtering discovered action factories by package name. Uses find() semantics.

paramixel.match.package.regex=com\.example\.tests

paramixel.match.class.regex​

Regex for filtering discovered action factories by fully qualified class name. Uses find() semantics.

paramixel.match.class.regex=^com\.example\.MyTest$

paramixel.match.tag.regex​

Regex for filtering discovered action factories by @Paramixel.Tag value. Uses find() semantics.

paramixel.match.tag.regex=smoke

paramixel.strictThreadLifecycle (Maven plugin only)​

This is a Maven plugin parameter, not a core Configuration constant. It is not recognized by programmatic Configuration.of(...). When enabled, the Maven plugin fails the build when non-daemon threads linger after execution whose context classloader is a URLClassLoader (i.e., threads that retain a reference to the test classloader).

paramixel.strictThreadLifecycle=true

See Maven Plugin for details.

paramixel.properties​

Place paramixel.properties on the runtime classpath:

paramixel.parallelism=4
paramixel.report.file=target/paramixel/paramixel.json
paramixel.failureOnSkip=true
my.custom.property=hello

System properties​

System properties override classpath values:

./mvnw test -Dparamixel.parallelism=16
./gradlew paramixelTest -Dparamixel.parallelism=16

Programmatic configuration​

Runner runner = Runner.builder()
.configuration(Configuration.of(Map.of(
Configuration.RUNNER_PARALLELISM, "4",
Configuration.REPORT_FILE, "build/paramixel/report.json")))
.build();

Accessing configuration inside actions​

Use ExecutionContext#configuration() in context-mode steps or custom actions:

Step.of("print-config", context -> {
context.configuration()
.getString("my.custom.property")
.ifPresent(System.out::println);
});

Typed getters​

All typed getters return Optional and throw ConfigurationException when a present value cannot be parsed as the requested type.

int parallelism = configuration.getInteger(Configuration.RUNNER_PARALLELISM).orElse(1);
boolean failOnSkip = configuration.getBoolean(Configuration.FAILURE_ON_SKIP).orElse(false);

Next steps​