Organise and analyse your pytest benchmarks
Project description
pytest-park
Organise and analyse your pytest benchmarks
Features
- Load pytest-benchmark JSON artifact folders and normalize runs, groups, marks, params, and custom grouping metadata.
- Compare reference runs against candidate runs over time with per-case and per-group delta summaries.
- Build custom grouping views with precedence across custom groups, benchmark groups, marks, and params.
- Associate optional profiler artifacts with benchmark runs for code-level analysis context.
- Serve an interactive local NiceGUI dashboard for exploratory benchmark comparison.
Installation
With pip:
python -m pip install pytest-park
With uv:
uv add --group test pytest-park
How to use it
# Print version
pytest-park version
# Start interactive mode (no arguments)
pytest-park
# Inspect a benchmark folder
pytest-park load ./benchmarks
# Analyze grouping distribution
pytest-park analyze ./benchmarks --group-by group --group-by param:device
# Compare a candidate run against a named reference tag/run id
pytest-park compare ./benchmarks --reference reference --candidate candidate-v2 --group-by custom:scenario
# Compare latest run against second-latest run when --reference/--candidate are omitted
pytest-park compare ./benchmarks
# Normalize method names by removing configured postfixes
pytest-park analyze ./benchmarks --original-postfix _orig --reference-postfix _ref
# Launch interactive dashboard
pytest-park serve ./benchmarks --reference reference --original-postfix _orig --reference-postfix _ref --host 127.0.0.1 --port 8080
Benchmark folder expectations
- Input artifacts are pytest-benchmark JSON files (
--benchmark-saveoutput) stored anywhere under a folder. - Reference selection uses explicit run id or tag metadata (
metadata.run_id,metadata.tag, or fallback identifiers). - Default comparison baseline is latest vs second-latest run when
--referenceand--candidateare omitted. - Grouping defaults to: custom groups > benchmark group > marks > params.
- Custom grouping tokens include
custom:<key>,group,marks,params, andparam:<name>. - Method normalization supports optional
--original-postfixand--reference-postfixto align benchmark names across implementations.
pytest-benchmark group stats override
If your benchmark method names encode postfixes and parameter segments, you can override
pytest_benchmark_group_stats using the helper from this package:
# tests/conftest.py
from pytest_park.pytest_benchmark import default_pytest_benchmark_group_stats
def pytest_benchmark_group_stats(config, benchmarks, group_by):
return default_pytest_benchmark_group_stats(
config,
benchmarks,
group_by,
original_postfix="_orig",
reference_postfix="_ref",
group_values_by_postfix={
"_orig": "original",
"_ref": "reference",
"none": "unlabeled",
},
)
This stores parsed parts in extra_info["pytest_park_name_parts"] with base_name, parameters, and postfix.
If you use postfixes in benchmark names, expose matching pytest-benchmark options in the same conftest.py:
def pytest_addoption(parser):
parser.addoption("--benchmark-original-postfix", action="store", default="")
parser.addoption("--benchmark-reference-postfix", action="store", default="")
Docs
uv run mkdocs build -f ./mkdocs.yml -d ./_build/
Update template
copier update --trust -A --vcs-ref=HEAD
Credits
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_park-0.1.0.tar.gz.
File metadata
- Download URL: pytest_park-0.1.0.tar.gz
- Upload date:
- Size: 21.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d890db67cccb5100060d2be391b390386c8f8aef31743fb55d679826d026594f
|
|
| MD5 |
b7e7171cbcba11131402619ecc326595
|
|
| BLAKE2b-256 |
1ba62bcbd3165bbe4bda4dcb6a03868526b82b9ce63cb26508f61f6e24ff62cb
|
File details
Details for the file pytest_park-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pytest_park-0.1.0-py3-none-any.whl
- Upload date:
- Size: 24.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e764f6d6141acad3d63425431b712013e9ad1e7a66d94e67b4db7a24fa249abd
|
|
| MD5 |
914e6c0f7560f7235e8642b0f3e4ac01
|
|
| BLAKE2b-256 |
2e45598ce44a33d117bc0a839db20489bc2797bc94b73f0e0ed388d9bc1b8638
|