Skip to content

Per-test settings

Nextest supports overriding some settings for subsets of tests, using the filterset and Rust cfg() syntaxes.

Overrides are set via the [[profile.<name>.overrides]] list.

Selecting tests

At least one of these fields must be specified:

filter
The filterset to match.
platform
The platforms to match: either a string, or a map with host and target keys for cross-compiling. See Specifying platforms for more information.

Supported overrides

priority 0.9.91
The test priority: a number from -100 to 100, both inclusive, with a default of 0.
retries
The number of retries, or a more complex retry policy for this test.
threads-required
Number of threads required for this test.
test-group
An optional test group for this test.
slow-timeout
Amount of time after which tests are marked slow.
leak-timeout
How long to wait after the test completes for any subprocesses to exit.
success-output and failure-output
Control when standard output and standard error are displayed for passing and failing tests, respectively.
junit.store-success-output and junit.store-failure-output
In JUnit reports, whether to store output for passing and failing tests, respectively.
default-filter 0.9.84
The default filter on this platform. Only supported for overrides that specify platform and not filter.
run-extra-args 0.9.86
Extra arguments to pass to the test binary.

Example

Basic example for per-test settings in .config/nextest.toml
[profile.ci]
retries = 1

[[profile.ci.overrides]]
filter = 'test(/\btest_network_/)'
retries = 4

[[profile.ci.overrides]]
platform = 'x86_64-unknown-linux-gnu'
slow-timeout = "5m"

[[profile.ci.overrides]]
filter = 'test(/\btest_filesystem_/)'
platform = { host = 'cfg(target_os = "macos")' }
leak-timeout = "500ms"
success-output = "immediate"

When --profile ci is specified:

  • for test names that start with test_network_ (including test names like my_module::test_network_), retry tests up to 4 times
  • on x86_64-unknown-linux-gnu, set a slow timeout of 5 minutes
  • on macOS hosts, for test names that start with test_filesystem_ (including test names like my_module::test_filesystem_), set a leak timeout of 500 milliseconds, and show success output immediately.

Override precedence

Overrides are configured as an ordered list, and are applied in the following order. For a given test T and a given setting S, overrides are applied in the following order:

  1. Command-line arguments and environment variables for S, if specified, take precedence over all overrides. See Hierarchical configuration for more.
  2. If nextest is run with --profile my-profile, the first override within profile.my-profile.overrides that matches T and configures S is applied.
  3. Otherwise, the first override within profile.default.overrides that matches T and configures S is applied.
  4. Otherwise, if nextest is run with --profile my-profile, the global configuration for that profile is applied, if it configures S.
  5. If none of the above conditions apply, the global configuration specified by profile.default is applied.

Precedence is evaluated separately for each override. If a particular override does not configure a setting, it is ignored for that setting.

Example

Example for per-test settings in .config/nextest.toml
[profile.default]
retries = 0  # this is the default, so it doesn't need to be specified
slow-timeout = "30s"

[[profile.default.overrides]]
filter = 'package(my-package)'
retries = 2
slow-timeout = "45s"

[profile.ci]
retries = 1
slow-timeout = { period = "15s", terminate-after = 2 }

[[profile.ci.overrides]]
filter = 'package(my-package) and test(/^flaky::/)'
retries = 3

If nextest is run with --retries 5, all tests are retried 5 times. The slow timeout settings are evaluated as listed below.

Otherwise, if nextest is run with --profile ci:

  • Tests in my-package that begin with flaky:: are retried 3 times, and are run with a slow timeout of 45 seconds.
  • Other tests in my-package are retried 2 times and are run with a slow timeout of 45 seconds.
  • All other tests are retried up to one time and are run with a slow-timeout of 15 seconds. Tests that take longer than 30 seconds are terminated.

If nextest is run without --profile:

  • Tests in my-package are retried 2 times and with a slow timeout of 45 seconds.
  • Other tests are retried 0 times with a slow timeout of 30 seconds.