Skip to main content

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:

  1. Collect all tests: Runs pytest --collect-only to find all available tests
  2. Compare with mapping: Queries .delta/test_mapping.db to see which tests are already mapped
  3. Find delta: Identifies tests that exist but have never been run with coverage
  4. Run all-at-once: Executes all unmapped tests together with --cov-context=test (fastest)
  5. 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.

Metadata

Release files for deltatest-cli 0.4.39

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for deltatest-cli 0.4.39
File Size Uploaded
deltatest_cli-0.4.39.tar.gz 58.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for deltatest-cli 0.4.39
File Interpreter ABI Platform
deltatest_cli-0.4.39-py3-none-any.whl Python 3 none any Details

Total release size: 114.8 kB

Release files / deltatest_cli-0.4.39.tar.gz

Download URL deltatest_cli-0.4.39.tar.gz
Size 58.1 kB
Tags Source
SHA-256 checksum
How to use checksums
439d00f3553d4ff1de53cb974fab19f342af3fe215c61f97f097961b8ce648e0
BLAKE2b-256 checksum
How to use checksums
b55d982a2e50cb148a7a9b7138b583c2439b498fddcd41d82642be11bfbc63cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.5

Release files / deltatest_cli-0.4.39-py3-none-any.whl

Download URL deltatest_cli-0.4.39-py3-none-any.whl
Size 56.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
16927a97e67af4097a3bde1e7880ca41d1a1a6e6d1ab73278a59f83371b7d262
BLAKE2b-256 checksum
How to use checksums
f8cf87941b08c5f128999cf6d7f746e6bd36697773fc7e0f4b7dd60d4311ea2f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.5

Release history Release notifications | RSS feed

This release

0.4.39 This release

2 release files

0.4.38

2 release files

0.4.35

2 release files

0.4.34

2 release files

0.4.33

2 release files

0.4.32

2 release files

0.4.31

2 release files

0.4.30

2 release files

0.4.29

2 release files

0.4.28

2 release files

0.4.25

2 release files

0.4.24

2 release files

0.4.23

2 release files

0.4.22

2 release files

0.4.21

2 release files

0.4.20

2 release files

0.4.19

2 release files

0.4.18

2 release files

0.4.17

2 release files

0.4.16

2 release files

0.4.15

2 release files

0.4.14

2 release files

0.4.13

2 release files

0.4.12

2 release files

0.4.11

2 release files

0.4.10

2 release files

0.4.9

2 release files

0.4.8

2 release files

0.4.6

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.9

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page