Skip to main content

A pytest-benchmark matrix, metadata, and JSON results layer.

Project description

benchmatrix

CI Documentation Docker CodeQL OpenSSF Scorecard Workflow lint Python 3.11-3.14 Typed with basedpyright Linted with Ruff Coverage gate: 95% SBOM: CycloneDX 1.6

Benchmark matrices for Python projects that need performance data they can trust, compare, and parse.

Open the benchmatrix documentation

benchmatrix sits on top of pytest-benchmark and adds the layer that benchmark suites usually grow by hand: implementation-by-case matrices, strict JSON-safe metadata, metric-aware result parsing, and concise display of saved benchmark runs.

Build repeatable suites Keep metrics honest Parse saved runs
Generate pytest benchmark tests across implementations, cases, and metric views. Separate latency, throughput, and local distribution comparisons instead of mixing unlike numbers. Load benchmatrix-tagged pytest-benchmark JSON rows into structured Python objects.

Quick Start

Create a benchmark matrix from ordinary synchronous callables in a pytest file:

from benchmatrix import BenchmarkCase, make_benchmark_test

implementations = {
    "builtin": sum,
    "loop": lambda vs: sum(v for v in vs),
}

cases = [
    BenchmarkCase.from_values(
        "small",
        list(range(100)),
        work_units=100,
        work_unit_name="items",
    ),
]

test_sum_matrix = make_benchmark_test(implementations, cases)

Run it with pytest-benchmark and keep the machine-readable output:

uv run pytest tests/test_sum_benchmark.py --benchmark-json benchmark.json

Read the tagged rows back later:

from benchmatrix import display_benchmark_rows, load_benchmark_json

rows = load_benchmark_json("benchmark.json")
display_benchmark_rows(rows)

Why It Exists

pytest-benchmark owns timing, calibration, statistics, terminal reporting, and JSON export. benchmatrix owns the repeatable structure around those timings.

Need benchmatrix gives you
Compare multiple implementations One generated pytest benchmark matrix instead of repeated parametrization code.
Track what each timing means JSON-safe invocation metadata with implementation, case, and metric identity.
Report different metric views Single-call latency, logical-work throughput, and local tail-latency summaries.
Reuse benchmark output Parsers and display helpers for pytest-benchmark JSON produced by benchmatrix tests.

benchmatrix is intentionally narrow: it benchmarks synchronous Python callables. It is not a load-testing framework, production latency monitor, or replacement for pytest-benchmark.

Interpreting Results

Benchmark output is environment-specific. Compare results only between runs from controlled environments, and keep the pytest-benchmark JSON output with the hardware, Python, dependency, and CI context that produced it.

Use metric names as part of every comparison:

  • single-call latency compares one completed synchronous target call;
  • batch throughput compares logical work per second when work_units is meaningful and consistent;
  • tail-latency summaries describe local distribution shape for a benchmark run, not production service latency.

Install

Install the released package with uv:

uv add benchmatrix

or with pip:

python -m pip install benchmatrix

For local development from this repository:

make ready

Documentation

The documentation source lives under docs/. The top-level Markdown files are short project entry points; detailed guides, explanations, references, and runbooks live in the MkDocs documentation.

Start here Use it for
First benchmark A complete first benchmark from test file to parsed JSON.
Create a benchmark matrix Cases, work units, fresh inputs, and synchronous target wrappers.
Parse benchmark results Loading and displaying benchmatrix-tagged pytest-benchmark JSON.
Performance model What the metrics mean and what they do not prove.
Development Local setup, test commands, and repository layout.
Compatibility Supported Python versions, API stability, and support policy.
Publishing Release artifacts, draft releases, PyPI publishing, and verification.
Configuration and automation Make targets, CI workflows, Docker checks, docs, and SBOM generation.

The MkDocs site builds in strict mode and generates API reference pages from the package docstrings.

Project Links

License

benchmatrix is distributed under the MIT License.

Project details


Download files

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

Source Distribution

benchmatrix-0.3.0.tar.gz (68.8 kB view details)

Uploaded Source

Built Distribution

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

benchmatrix-0.3.0-py3-none-any.whl (20.1 kB view details)

Uploaded Python 3

File details

Details for the file benchmatrix-0.3.0.tar.gz.

File metadata

  • Download URL: benchmatrix-0.3.0.tar.gz
  • Upload date:
  • Size: 68.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for benchmatrix-0.3.0.tar.gz
Algorithm Hash digest
SHA256 77d633866bf5c0d954eb4adf00b9cff7276dfe1e4be3517cf957d4be67d88bd2
MD5 5a564738e3cbd8b782419f01b308084e
BLAKE2b-256 222cb37d88df4cbf9e17b2ac8d8c5ad9383301f780c3966ffba98c7171411417

See more details on using hashes here.

Provenance

The following attestation bundles were made for benchmatrix-0.3.0.tar.gz:

Publisher: release.yml on ryancswallace/benchmatrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file benchmatrix-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: benchmatrix-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 20.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for benchmatrix-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d0be87da1f8d8baeed3a1442c6b81cea348b9fb81f4e6a2e0f6455e1a9f5e2af
MD5 7dc66e0cf8ad5075537b3b64a8bbb5cc
BLAKE2b-256 5940091b1b42bbbb258b7b41cbae8451c5c59286ccad2e9b41f904e7c828f5cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for benchmatrix-0.3.0-py3-none-any.whl:

Publisher: release.yml on ryancswallace/benchmatrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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