Run only the tests affected by your code changes.
Project description
Delta
Run only the tests affected by your code changes - automatically!
Delta integrates with your git workflow as a pre-commit hook, running only tests that cover the code you've changed. This dramatically speeds up your development cycle while ensuring quality.
Key Features
- Fast: Run only affected tests, not the entire suite
- Safe: Blocks commits if affected tests fail
- Intelligent: Uses SQLite-based test-to-code mapping for instant lookups
- Incremental Coverage: Combines coverage from test runs
- New Test Detection: Always runs newly added tests
- Auto-Discovery: Detects unmapped tests and builds mapping automatically
- Pre-commit Hook: Automatic integration with git workflow
- Status Check: Instantly inspect database mapping stats (both local and cloud via deltatest.dev)
- Delta Cloud Sync: Share test mappings across CI/CD and teams automatically (Powered by deltatest.dev)
Quick Start (Pre-Commit Hook)
cd ~/workspace/myproject
# Install the pre-commit hook
delta install
# That's it! Now every commit will:
# 1. Find tests affected by your changes
# 2. Run only those tests
# 3. Block commit if tests fail
# 4. Combine coverage with existing data
📋 How It Works
Pre-Commit Flow
Developer commits changes
↓
Pre-commit hook triggered
↓
Compare staged changes vs development branch
↓
Query SQLite mapping: "Which tests cover these lines?"
↓
Detect unmapped tests (dry-run pytest --collect-only)
↓
Run unmapped tests all-at-once (build mapping)
↓
Run mapped affected tests with coverage
↓
Tests pass? → Combine coverage → Allow commit
Tests fail? → Block commit
Auto-Discovery of Unmapped Tests
The pre-commit hook automatically detects tests that exist in your codebase but aren't in the mapping database yet:
- Collect all tests: Runs
pytest --collect-onlyto find all available tests - Compare with mapping: Queries
.delta/test_mapping.dbto see which tests are already mapped - Find delta: Identifies tests that exist but have never been run with coverage
- Run all-at-once: Executes all unmapped tests together with
--cov-context=test(fastest) - Update mapping: After completion, updates the mapping database with new coverage
Why this matters:
- New tests you write are automatically added to the mapping
- Tests added by teammates get mapped when you first commit
- No need to manually regenerate the entire mapping
- Mapping database grows organically over time
- All tests run in a single pytest invocation (fastest possible)
Example:
$ git commit -m "Fix bug in auth.py"
Found 1 changed Python file
Mapping DB: 1234 tests, 567 files, 45678 mappings
Collected 1250 total tests from pytest
Found 16 unmapped test(s)
================================================================================
Building coverage mapping for 16 unmapped test(s)
================================================================================
Running unmapped test: unit_tests/test_new_feature.py::test_case_1
✓ Mapping updated for: unit_tests/test_new_feature.py::test_case_1
Running unmapped test: unit_tests/test_new_feature.py::test_case_2
✓ Mapping updated for: unit_tests/test_new_feature.py::test_case_2
...
✓ Successfully mapped 16 test(s)
================================================================================
Running 3 affected test(s)...
================================================================================
...
Mapping Database
The mapping is stored in .delta/test_mapping.db (SQLite) at your repo root:
CREATE TABLE test_coverage_ranges (
test_name TEXT NOT NULL,
file_path TEXT NOT NULL,
ranges TEXT NOT NULL,
PRIMARY KEY (test_name, file_path)
);
Fast lookups: "Which tests cover file X, line Y?"
Installation
Prerequisites
- Python 3.8+
- pytest >= 7.0
- pytest-cov >= 4.0
- Git repository
Step 1: Install Package
Install via pip:
pip install deltatest-cli
Step 2: Build Mapping Database
cd ~/workspace/myproject
# Build mapping database (resumable)
delta build-mapping --verbose
Step 3: Install Pre-Commit Hook
cd ~/workspace/myproject
delta install
Done! Now every commit will run only affected tests.
Usage
Pre-Commit Hook (Automatic)
Just commit normally:
git add src/my_module.py
git commit -m "Fix bug in authentication"
# Hook runs automatically:
# - Finds tests covering src/my_module.py
# - Runs only those tests
# - Blocks commit if tests fail
# - Combines coverage on success
Manual Test Running
# Show what tests would run
delta run --dry-run --verbose
# Run affected tests manually
delta run
# Compare against different branch
delta run --base-branch develop
# Pass pytest arguments
delta run -- -x --pdb
Check Mapping Status
You can inspect the status and statistics of the local mapping database and the remote mapping service (deltatest.dev):
delta status
Commands
delta run
Run affected tests based on changes.
delta run [OPTIONS] [-- PYTEST_ARGS]
Options:
--repo-root PATH Repository root (default: current directory)
--local, --no-remote Run locally without connecting to the deltatest.dev remote mapping service
--base-branch BRANCH Branch to compare against (default: master)
--coverage-file PATH Path to .coverage file
--dry-run Show tests without running
--min-tests N Minimum tests required
--explain Show exactly which tests are affected by which files/lines
-v, --verbose Detailed output
delta build-mapping
Build test mapping database iteratively.
delta build-mapping [OPTIONS]
Options:
--repo-root PATH Repository root (default: current directory)
--local, --no-remote Build mapping database locally without remote deltatest.dev connection
--mapping-db PATH Path to mapping database
--test-dir PATH Directory containing tests
-v, --verbose Detailed output
delta status
Show local and remote (deltatest.dev) database status and statistics.
delta status [OPTIONS]
Options:
--repo-root PATH Repository root (default: current directory)
--mapping-db PATH Path to mapping database
-v, --verbose Detailed output
Bypassing the Hook
For urgent commits:
git commit --no-verify -m "Urgent hotfix"
Contributing
Delta is an open-source developer productivity tool.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file deltatest_cli-0.4.38.tar.gz.
File metadata
- Download URL: deltatest_cli-0.4.38.tar.gz
- Upload date:
- Size: 58.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f7b5f910937da49282655ecafa4d2494780d49c51bc53d956d470b09dfbe132
|
|
| MD5 |
d712808ec3251adc2d87653408060ceb
|
|
| BLAKE2b-256 |
237dee1376f31726c889fb67b17495ca66694f6bb162ae70878be4a712e69091
|
File details
Details for the file deltatest_cli-0.4.38-py3-none-any.whl.
File metadata
- Download URL: deltatest_cli-0.4.38-py3-none-any.whl
- Upload date:
- Size: 56.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1863f959493fd2c8a1a6242f0fee71eb3dbb73e94e0022a1af639b53f6d7d056
|
|
| MD5 |
a10061b640ab2c7c0b263638e4d553ba
|
|
| BLAKE2b-256 |
515be1908da6f755d572b0148f29039060326dde61fe475de647c8019ffe4115
|