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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

deltatest_cli-0.4.39.tar.gz (58.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

deltatest_cli-0.4.39-py3-none-any.whl (56.7 kB view details)

Uploaded Python 3

File details

Details for the file deltatest_cli-0.4.39.tar.gz.

File metadata

  • Download URL: deltatest_cli-0.4.39.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

Hashes for deltatest_cli-0.4.39.tar.gz
Algorithm Hash digest
SHA256 439d00f3553d4ff1de53cb974fab19f342af3fe215c61f97f097961b8ce648e0
MD5 7cfe834af348befadb2bc6da38ada98f
BLAKE2b-256 b55d982a2e50cb148a7a9b7138b583c2439b498fddcd41d82642be11bfbc63cf

See more details on using hashes here.

File details

Details for the file deltatest_cli-0.4.39-py3-none-any.whl.

File metadata

  • Download URL: deltatest_cli-0.4.39-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

Hashes for deltatest_cli-0.4.39-py3-none-any.whl
Algorithm Hash digest
SHA256 16927a97e67af4097a3bde1e7880ca41d1a1a6e6d1ab73278a59f83371b7d262
MD5 d351bee51c584dc83830fff9d818dbc0
BLAKE2b-256 f8cf87941b08c5f128999cf6d7f746e6bd36697773fc7e0f4b7dd60d4311ea2f

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.4.39 This release

2 files

0.4.38

2 files

0.4.35

2 files

0.4.34

2 files

0.4.33

2 files

0.4.32

2 files

0.4.31

2 files

0.4.30

2 files

0.4.29

2 files

0.4.28

2 files

0.4.27

2 files

0.4.26

2 files

0.4.25

2 files

0.4.24

2 files

0.4.23

2 files

0.4.22

2 files

0.4.21

2 files

0.4.20

2 files

0.4.19

2 files

0.4.18

2 files

0.4.17

2 files

0.4.16

2 files

0.4.15

2 files

0.4.14

2 files

0.4.13

2 files

0.4.12

2 files

0.4.11

2 files

0.4.10

2 files

0.4.9

2 files

0.4.8

2 files

0.4.6

2 files

0.4.5

2 files

0.4.4

2 files

0.4.3

2 files

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

0.3.9

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page