Plugins for the rut test runner
npx claudepluginhub schettino72/rutUse rut test runner for running Python unittest tests
Claude Code marketplace entries for the plugin-safe Antigravity Awesome Skills library and its compatible editorial bundles.
Production-ready workflow orchestration with 80 focused plugins, 185 specialized agents, and 153 skills - optimized for granular installation and minimal token usage
Agent skills for building and maintaining promptfoo evaluations
Share bugs, ideas, or general feedback.
rut is a modern and fully-featured test runner for Python's unittest framework, with simplicity as a core design goal.
Sponsored by asserto.ai
rut is only 3 characters.rut?unittest User: A Modern UpgradeAre you a fan of the stability and explicitness of unittest, but wish you had a better runner experience? rut is your drop-in upgrade.
rut. No more writing if __name__ == '__main__': boilerplate.asyncio Support: rut automatically detects and runs async tests correctly. No more asyncio.run() wrappers.-k "transfer").--cov).pytest User: Simplicity and Power, ReunitedDo you appreciate the power of modern test runners, but find yourself wrestling with the complexity and "magic" of third-party frameworks? rut offers a compelling alternative, embracing the explicitness of the standard library.
rut is built directly on unittest. There are no hidden hooks, complex fixture systems, or assertion rewriting. Your tests are plain, debuggable Python.-k), failing fast (-x), and seamless asyncio support, without the overhead of a large framework.rut is a single, focused tool, not a sprawling ecosystem. Keep your project's dependencies clean and understandable.Add rut as a development dependency to your project:
uv add --dev rut
rut [options] [path]
To run all tests in the tests/ directory that have the word "transfer" in their name, you would run:
rut -k "transfer"
| Option | Short | Description |
|---|---|---|
--keyword | -k | Only run tests that match the given keyword. |
--exitfirst | -x | Exit on the first failure. |
--capture | -s | Disable all output capturing. |
--alpha | -a | Sort tests alphabetically instead of by import dependencies. |
--changed | -c | Only run tests affected by file changes since last successful run. |
--dry-run | List tests in execution order without running them. | |
--verbose | -v | Show test names instead of dots. |
--debug | Show internal debug information (dependency graph, changed modules). | |
--cov | Run with code coverage. | |
--version | -V | Show version and exit. |
--test-base-dir | The base directory for conftest.py discovery. | |
--no-color | Disable color output. |
| Argument | Description | Default |
|---|---|---|
path | Path to test file or directory to run. Does not affect project config. | discover all in test_dir |
rut can be configured via the [tool.rut] section in your pyproject.toml file.
rut looks for pyproject.toml in the current directory. If cwd is tests/, it also checks the parent directory and changes to it if found.
Without pyproject.toml, rut runs in ad-hoc mode with test_dir=. and source_dirs=["."].
source_dirsSpecifies the source directories for coverage reporting, incremental testing (--changed), and import dependency analysis. If not configured, the default is ["src", "tests"]. Validated only when --cov or --changed is used.
[tool.rut]
source_dirs = ["finance", "tests"]
warning_filtersTo add custom warning filters, use the warning_filters key. The format for each filter is a string that follows the warnings.filterwarnings format: action:message:category:module.
[tool.rut]
warning_filters = [
"error::UserWarning:pydantic",
]
test_base_dirThe base directory for test discovery and conftest.py lookup. Default: "tests".
[tool.rut]
test_base_dir = "my_tests"
For standard, synchronous tests, you can use the standard unittest.TestCase.
import unittest