Adds tests/benchmarks/ with pytest-benchmark coverage of the hot codec paths and end-to-end SELECT/INSERT/pool/async round-trips. Establishes a committed baseline.json so PRs can be regression-checked at review via --benchmark-compare. * test_codec_perf.py (16): decode/encode_param/parse_tuple_payload micro-benchmarks - run without container, suitable for pre-merge CI. * test_select_perf.py (4): SELECT round-trips - 1-row latency floor, 10-row, 1k-row full fetch, parameterized. * test_insert_perf.py (3): single-row INSERT, executemany 100 / 1000. * test_pool_perf.py (3): cold connect, pool acquire/release, pool acquire + query + release. * test_async_perf.py (2): async round-trip overhead, 10x concurrent. * baseline.json: committed snapshot, 28 measurements. * benchmark pytest marker, gated off by default. * Makefile: bench / bench-codec / bench-save targets; test-integration excludes benchmarks for speed. Headline numbers (dev container loopback): * decode(int): 181 ns * parse_tuple 5 cols: 2.87 µs/row * SELECT 1 round-trip: 177 µs * Pool acquire+query+release: 295 µs * Cold connect: 11.2 ms (72x slower than pool) UTF-8 decode carries no measurable cost vs iso-8859-1 - confirms Phase 20 didn't regress anything. Total: 69 unit + 211 integration + 28 benchmark = 308 tests.
22 lines
830 B
Python
22 lines
830 B
Python
"""Phase 21 — performance benchmarks for informix-db.
|
|
|
|
These tests are gated behind the ``benchmark`` marker and excluded from
|
|
the default ``pytest`` run. To run:
|
|
|
|
make bench # all benchmarks
|
|
uv run pytest -m benchmark tests/benchmarks/test_codec_perf.py
|
|
|
|
Codec micro-benchmarks (``test_codec_perf.py``) run without a server
|
|
and are fast enough for tight inner-loop iteration. End-to-end
|
|
benchmarks (SELECT/INSERT/pool) require an Informix container.
|
|
|
|
Output goes to ``.benchmarks/`` (gitignored). Persistent baseline at
|
|
``tests/benchmarks/baseline.json`` is updated manually with::
|
|
|
|
uv run pytest -m benchmark --benchmark-only \
|
|
--benchmark-save=baseline --benchmark-storage=tests/benchmarks/
|
|
|
|
Then copy ``.benchmarks/Linux-CPython-X.Y/000N_baseline.json`` to
|
|
``tests/benchmarks/baseline.json``.
|
|
"""
|