Reusable pytest results ingestion tooling with database export and CLI helpers.
Project description
pytest-chronicle
Searchable git-aware pytest history with a lean CLI and easy storage backends.
Pin down regressions. Squash bugs. Join the Federation today.
What it does
Running pytest:
- Emits per-test records (result/stdout/stderr/traceback)
- Persists test result records to SQLite / Postgres (or implement your own storage backend) with:
- git/CI metadata
- pytest invocation parameters
- timestamps
- user-defined labels
With the pytest-chronicle CLI you can now query the test result history.
Install
pip install pytest-chronicle
Quickstart
pytest-chronicle init # create config + local sqlite
pytest -q # auto-ingests using config/env/fallback SQLite
pytest-chronicle query last-green --format json --pretty # ask questions
pytest-chronicle query last-red tests/test_mod.py::Test::test_case # pytest-style selectors
Common commands
pytest-chronicle init– scaffold.pytest-chronicle.tomland an async SQLite DB.pytest-chronicle ingest --jsonl <path>– ingest JSONL/summary artifacts.pytest-chronicle query last-red|last-green|errors|flipped-green|compare– history lookups. Filters:-k/-mlike pytest,--labels,--since,--until,--branch/--commit, positional pytest-style selectors, or--pytest-select "-m 'slow' -k expr path::nodeid". Outputs include per-test runtime with smart units (μs/ms/s) and git metadata; text mode shows colored tables by default (--no-colorto disable). Slow tests (≥1s) are highlighted yellow, very slow (≥5s) in red. Use--show-marksto display test marks.pytest-chronicle query timeline– colored TTY timeline of recent runs for matching tests (?marks not-run/filtered cases). Use-t/--show-timesto display execution times.pytest-chronicle query slowest– tests sorted by execution time (slowest first); use--status failedto find slowest failures.pytest-chronicle query stats– per-test failure rates, pass/fail counts, and timing stats; use--min-runs Nto filter low-sample tests,--sort-by failure-rate|avg-time|max-time|total-runsto rank.pytest-chronicle run <project> -- <pytest args>– run pytest underuv, collect artifacts, optionally ingest.pytest-chronicle backfill– ingest many summary.json files.pytest-chronicle export-sqlite/import-sqlite– migrate between backends.pytest-chronicle db upgrade– apply Alembic migrations.pytest-chronicle config show|set– view or set repo defaults.
Configuration & defaults
- Precedence: CLI flag
--database-url> env (PYTEST_RESULTS_DB_URL, legacyTEST_RESULTS_DATABASE_URL/SCS_DATABASE_URL) >.pytest-chronicle.toml> fallback SQLite at<repo>/.pytest-chronicle/chronicle.db(async). - Example config:
[chronicle] database_url = "postgresql+asyncpg://user:pass@host/db" project = "my-project" suite = "ci-smoke,linux" # labels/tags (comma-separated)
- Typical flow: use SQLite for local dev (via
init); point env or config at Postgres for CI/prod. No other changes needed. - If you skip
--projectduringinit, it is auto-detected frompyproject.toml(or the current folder name); the CLI tells you how to change it later.
Pytest plugin (auto ingestion)
- Install the package; the
pytest_chronicleplugin is auto-discovered. - If a database is configured via env/config (or fallback SQLite), the plugin will ingest automatically at session end. You can still pass
--chronicle-db <url>to override, or--chronicle-no-ingestto skip. - Default JSONL path:
.artifacts/test-results/chronicle-results.jsonl(created automatically).
More docs
- Detailed guide:
docs/guide.md - Backend abstraction:
docs/storage-backends.md
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 pytest_chronicle-0.4.2.tar.gz.
File metadata
- Download URL: pytest_chronicle-0.4.2.tar.gz
- Upload date:
- Size: 42.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
44442939a0a8303a7a17935c86ade08e15fc0874e26440a31e6721cf4e1ba522
|
|
| MD5 |
1bf14559ca1b8986fcefe9f70d85a9d3
|
|
| BLAKE2b-256 |
460f9076c6b729782037394759dcb0e6f39886887b1562ce0f38f0e06927a6a2
|
File details
Details for the file pytest_chronicle-0.4.2-py3-none-any.whl.
File metadata
- Download URL: pytest_chronicle-0.4.2-py3-none-any.whl
- Upload date:
- Size: 52.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fbcad69b2a1e7854b7a060e27143b99dacadfc7517a3ed9b6a5731ec2bcb94c9
|
|
| MD5 |
e474dec868d2f5f68bb03a64a348b6be
|
|
| BLAKE2b-256 |
87ada2256a82ff91fb54b5d0a54d10c4c6b174a1a5cb7d7a09f702b71f6667c9
|