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
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pytest_chronicle-0.4.6.tar.gz
(43.2 kB
view details)
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.6.tar.gz.
File metadata
- Download URL: pytest_chronicle-0.4.6.tar.gz
- Upload date:
- Size: 43.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1d70c0aa909da59812083563c83dc34b5e67bfdd5113d0a8fc0c7c5dc414716
|
|
| MD5 |
bcc2cf8197af43df67c6c88962b70e6c
|
|
| BLAKE2b-256 |
8633ef13da7cd4f1e401a7d115a493f4398ae62fbe9e3a104fb5f2f7d91c1aab
|
File details
Details for the file pytest_chronicle-0.4.6-py3-none-any.whl.
File metadata
- Download URL: pytest_chronicle-0.4.6-py3-none-any.whl
- Upload date:
- Size: 52.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.5.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2edd5b4f7551e2a73fe4c1cf10fa3ba78797a77211be46fbf90da78cb23c08b
|
|
| MD5 |
f1dc973e315b036ea2381e7ab5002f63
|
|
| BLAKE2b-256 |
e283ec1783422ecbda813794ac7fc22ec11d633b738bcb24c694cb3140515bb0
|