cargo-nextest

cargo-nextest - Next-Generation Test Runner

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "cargo-nextest" with this command: npx skills add laurigates/claude-plugins/laurigates-claude-plugins-cargo-nextest

cargo-nextest - Next-Generation Test Runner

cargo-nextest is a faster, more reliable test runner for Rust that executes each test in its own process for better isolation and parallel performance.

Installation

Install cargo-nextest

cargo install cargo-nextest --locked

Verify installation

cargo nextest --version

Basic Usage

Run all tests with nextest

cargo nextest run

Run specific test

cargo nextest run test_name

Run tests in specific package

cargo nextest run -p package_name

Run with verbose output

cargo nextest run --verbose

Run ignored tests

cargo nextest run -- --ignored

Run all tests including ignored

cargo nextest run -- --include-ignored

Configuration File

Create .config/nextest.toml in your project root:

[profile.default]

Number of retries for flaky tests

retries = 0

Test threads (default: number of logical CPUs)

test-threads = 8

Fail fast - stop on first failure

fail-fast = false

Show output for passing tests

success-output = "never" # never, immediate, final, immediate-final

Show output for failing tests

failure-output = "immediate" # never, immediate, final, immediate-final

[profile.ci]

CI-specific configuration

retries = 2 fail-fast = true success-output = "never" failure-output = "immediate-final"

Slow test timeout

slow-timeout = { period = "60s", terminate-after = 2 }

[profile.ci.junit]

JUnit XML output for CI

path = "target/nextest/ci/junit.xml"

Test Filtering with Expression Language

Run tests matching pattern

cargo nextest run -E 'test(auth)'

Run tests in specific binary

cargo nextest run -E 'binary(my_app)'

Run tests in specific package

cargo nextest run -E 'package(my_crate)'

Complex expressions with operators

cargo nextest run -E 'test(auth) and not test(slow)'

Run all integration tests

cargo nextest run -E 'kind(test)'

Run only unit tests in library

cargo nextest run -E 'kind(lib) and test(/)'

Expression Operators

  • test(pattern)

  • Match test name (regex)

  • binary(pattern)

  • Match binary name

  • package(pattern)

  • Match package name

  • kind(type)

  • Match test kind (lib, bin, test, bench, example)

  • platform(os)

  • Match target platform

  • not expr

  • Logical NOT

  • expr and expr

  • Logical AND

  • expr or expr

  • Logical OR

Parallel Execution

Nextest runs each test in its own process by default, providing:

  • Better isolation - Tests cannot interfere with each other

  • True parallelism - No global state conflicts

  • Fault isolation - One test crash doesn't affect others

  • Better resource management - Each test has clean environment

Control parallelism

cargo nextest run --test-threads 4

Single-threaded execution

cargo nextest run --test-threads 1

Use all available cores

cargo nextest run --test-threads 0

Output Formats

Human-readable output (default)

cargo nextest run

JSON output for programmatic parsing

cargo nextest run --message-format json

JSON with test output

cargo nextest run --message-format json-pretty

Generate JUnit XML for CI

cargo nextest run --profile ci

Combine with cargo-llvm-cov for coverage

cargo llvm-cov nextest --html

Flaky Test Management

In .config/nextest.toml

[profile.default]

Retry flaky tests automatically

retries = 3

Detect tests that pass on retry

[profile.default.overrides] filter = 'test(flaky_)' retries = 5

Run with retries

cargo nextest run --retries 3

Show retry statistics

cargo nextest run --retries 3 --failure-output immediate-final

GitHub Actions Integration

name: Test

on: [push, pull_request]

jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4

  - uses: dtolnay/rust-toolchain@stable

  - name: Install nextest
    uses: taiki-e/install-action@v2
    with:
      tool: nextest

  - name: Run tests
    run: cargo nextest run --profile ci --all-features

  - name: Upload test results
    if: always()
    uses: actions/upload-artifact@v4
    with:
      name: test-results
      path: target/nextest/ci/junit.xml

  - name: Publish test results
    uses: EnricoMi/publish-unit-test-result-action@v2
    if: always()
    with:
      files: target/nextest/ci/junit.xml

Advanced Configuration

.config/nextest.toml

[profile.default]

Timeout for slow tests

slow-timeout = { period = "30s", terminate-after = 3 }

Test groups for resource management

[test-groups.database] max-threads = 1 # Serialize database tests

[profile.default.overrides] filter = 'test(db_)' test-group = 'database'

Platform-specific overrides

[[profile.default.overrides]] platform = 'x86_64-pc-windows-msvc' slow-timeout = { period = "60s" }

Doctests Limitation

Important: nextest does not support doctests. Use cargo test for doctests:

Run doctests separately

cargo test --doc

Run both nextest and doctests in CI

cargo nextest run && cargo test --doc

Workspace Configuration

In workspace root .config/nextest.toml

[profile.default] default-filter = 'all()'

Per-package overrides

[[profile.default.overrides]] filter = 'package(slow_tests)' test-threads = 1 slow-timeout = { period = "120s" }

Comparison with cargo test

Feature cargo test cargo nextest

Execution model In-process Per-test process

Parallelism Thread-based Process-based

Test isolation Shared state Complete isolation

Output format Limited Rich (JSON, JUnit)

Flaky test handling Manual Built-in retries

Doctests Supported Not supported

Performance Good Excellent

Best Practices

Use profiles for different environments:

  • default for local development

  • ci for continuous integration

  • coverage for coverage analysis

Configure flaky test detection:

[profile.default] retries = 2

Group resource-intensive tests:

[test-groups.expensive] max-threads = 2

Set appropriate timeouts:

[profile.default] slow-timeout = { period = "60s", terminate-after = 2 }

Use expression filters effectively:

Run fast tests during development

cargo nextest run -E 'not test(slow_)'

Always run doctests separately in CI:

  • run: cargo nextest run --all-features
  • run: cargo test --doc --all-features

Troubleshooting

Tests timeout too quickly:

[profile.default] slow-timeout = { period = "120s", terminate-after = 3 }

Too much parallel execution:

cargo nextest run --test-threads 4

Need test output for debugging:

cargo nextest run --success-output immediate --failure-output immediate

Flaky tests in CI:

[profile.ci] retries = 3 failure-output = "immediate-final"

References

  • nextest documentation

  • Configuration reference

  • Expression language

  • CI Features

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

ruff linting

No summary provided by upstream source.

Repository SourceNeeds Review
General

imagemagick-conversion

No summary provided by upstream source.

Repository SourceNeeds Review
General

jq json processing

No summary provided by upstream source.

Repository SourceNeeds Review