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.
| Value | Behavior |
|---|---|
true | Force ANSI on |
false | Force 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);