A detailed breakdown of every tool in the pytest ecosystem that does test selection — mechanism, precision, features, and maturity.
Last updated July 2026 · Sources: PyPI, GitHub, official pytest plugin list
Scored across 20 criteria: selection mechanism, precision, subprocess coverage, CI integration, dashboard, team sync, VS Code extension, and more.
✓ = yes ✗ = no ~ = partial
| Feature | pytest-deltatest | pytest-testmon | pytest-tia | pytest-cagoule | pytest-changed | pytest-picked |
|---|---|---|---|---|---|---|
| Maturity & Ecosystem | ||||||
| Actively maintained | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ |
| Python 3.12+ support | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| On official pytest plugin list | ~Submission pending | ✓ | ✗ | ✗ | ✓ | ✓ |
| Selection Mechanism | ||||||
| Runtime coverage mappingSees what actually runs, not what imports | ✓ | ✓ | ✓ | ✗AST + dep graph, no coverage | ✗git diff only | ✗git diff only |
| Subprocess coverageCovers child processes launched during tests | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Line-level precisionMap individual lines, not just files/modules | ✓ | ✓ | ~Module-level | ✗ | ✗ | ✗ |
| Git-aware selection | ✓ | ~File-based only | ✓ | ✗ | ✓ | ✓ |
| Team & CI Features | ||||||
| Cloud mapping syncShare coverage maps across machines | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Web dashboard | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ |
| VS Code extension | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Pre-commit hook support | ✓ | ~ | ✗ | ✗ | ✗ | ✗ |
| Tox integration | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ |
| GitHub App / CI integration | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Free tier available | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Understanding the mechanism determines the precision.
Uses .coverage data to map tests to source files. Stores mapping in a local SQLite DB. Very mature and widely used. Doesn't support subprocess coverage or cloud sync — the mapping lives per-machine.
Similar coverage-based approach to testmon but at module level. Last commit was years ago. Python 3.12 compatibility is uncertain. Not suitable for new projects.
Builds a static dependency graph using AST parsing — not runtime coverage. This means it can miss dynamic dependencies and false-negative on tests that should run. Also unmaintained.
Runs tests in files that match git-changed filenames. Simple heuristic — no coverage mapping. Can miss tests in unchanged files that import changed modules.
Runs unstaged/staged test files from git status. Very simple but only useful when the test files themselves change — not when source code changes.
Maps coverage at the line level including subprocesses, syncs maps via the cloud so your whole team benefits from each other's runs. Comes with a VS Code extension, web dashboard, and CI integration.
The only complete product. Line-level precision, subprocess coverage, VS Code extension, web dashboard, team sync, pre-commit hook, tox support — and the only tool that covers child processes. Built for teams, not just individuals.
Join teams that cut CI time by 90% — in one pip install.