Skip to content

Releases: polishdataengineer/testenix

Testenix 0.3.0 — Adaptive scheduling and trustworthy benchmarks

Choose a tag to compare

@polishdataengineer polishdataengineer released this 21 Jul 14:50
a1f30ab

Testenix 0.3.0 makes native execution project-aware instead of assuming that the logical CPU count is always the best worker count.

Highlights

  • Adaptive workers = "auto" selection based on execution units, CPU capacity, duration-history coverage, predicted process-start cost, and makespan.
  • New testenix tune command (also available as testenix benchmark) for fresh-process, counterbalanced worker measurements. Configuration is changed only with explicit --write, guarded by source fingerprints and configuration-drift checks.
  • Opt-in --shard-modules execution for eligible modules. Conservative static checks retain normal module affinity when fixtures, global mutation, or import-time lifecycle hazards are detected; enabling sharding remains an explicit trust decision for dynamic behavior.
  • Source-verified collection manifests via testenix manifest, allowing unchanged suites to avoid a duplicate collection import. Stale manifests safely fall back to supervised collection.
  • New synthetic 100/500/1,000/3,000-test matrix tooling and a redaction-safe real-project benchmark harness, with bounded timeout cleanup on Windows and POSIX.

Benchmark context

The existing 3.15× result is a historical Testenix 0.1.0 synthetic baseline: 100,000 no-op tests across 16 modules, four workers, --no-history, on one Apple M4 Pro / CPython 3.11 machine. It is not a Testenix 0.3.0 or real-project result.

No clean Testenix 0.3.0 scaling matrix is published with this release, so Testenix does not claim a universal speedup over pytest. Run testenix tune in your own project and consult the documented benchmark methodology before making a project-specific comparison.

Install

python -m pip install --upgrade testenix==0.3.0

Full Changelog: v0.2.1...v0.3.0

Testenix v0.2.1 — Clearer native terminal output

Choose a tag to compare

@polishdataengineer polishdataengineer released this 21 Jul 07:54
0917d8e

Testenix 0.2.1 makes native test runs substantially easier to scan, especially for large suites.

Highlights

  • testenix run now uses a compact, deterministic per-file report by default while preserving
    complete collection and failure diagnostics.
  • Added -q/--quiet, -v/--verbose (including -vv), --show-skips, and --durations N;
    use --durations 0 to show all durations.
  • Added --color auto|always|never and --no-color, with TTY, NO_COLOR, FORCE_COLOR, CI, and
    dumb-terminal handling.
  • Long paths are bounded to terminal width, durations use adaptive units, and the final summary
    remains plain and machine-readable.
  • Compact rendering stays bounded even for very large suites; 100,000 passing results from one
    file are aggregated instead of producing a wall of output.
  • Documentation now clearly separates native Testenix rendering from the unchanged pytest renderer
    used by testenix pytest.

The transparent pytest bridge is unchanged. For concise output from an existing pytest suite, use:

testenix pytest -q --tb=short tests

For the new native Testenix interface, use:

testenix run tests

Compatibility note

The default human-readable testenix run text changed from one row per test to one row per source
file. Scripts should consume JSON or JUnit reports rather than terminal text; -v remains available
for detailed per-test output. Result semantics, exit codes, JSON, JUnit, and the pytest bridge are
unchanged.

Upgrade

python -m pip install --upgrade "testenix==0.2.1"

Validation

  • 333 project tests passing directly and through the pytest bridge.
  • CI passing on Python 3.11-3.14 across Linux, macOS, and Windows.
  • Wheel, sdist, Twine, isolated installation, pytest-extra, and native smoke checks passing.

Documentation

Testenix v0.2.0 — Safe pytest migration

Choose a tag to compare

@polishdataengineer polishdataengineer released this 20 Jul 21:50
0f39289

Testenix 0.2.0 makes migration from real pytest suites materially more useful while keeping the original test suite untouched.

Highlights

  • Native, dependency-free tmp_path and transactional monkeypatch fixtures.
  • Native autouse fixtures with deterministic setup and teardown ownership.
  • Safe conversion of simple pytest classes using a fresh instance per test.
  • Bare @pytest.mark.asyncio migration with a fresh, closed event loop per test or parametrized case.
  • Static support for common local helpers that receive monkeypatch, while aliases, dynamic rebinding, unsupported methods, and escaping values remain blocked.
  • Fail-closed checks for pytest-asyncio loop scope, debug mode, event_loop_policy, configuration precedence, and relevant PYTEST_ADDOPTS behavior.
  • Clearer migration summaries with complete line-addressed diagnostics available in JSON reports.

Safe migration workflow

python -m pip install --upgrade "testenix[pytest]==0.2.0"
testenix migrate pytest tests --dry-run
testenix migrate pytest tests --check --workers 4

Migration remains copy-only and transactional. Source tests are fingerprinted, source and native outcomes are compared, and the destination is published only after all validation gates pass. Original tests are never deleted or renamed.

Validation

  • 284 project tests passing.
  • CI passing on Python 3.11-3.14 across Linux, macOS, and Windows.
  • Wheel, sdist, Twine, isolated installation, pytest-extra, and migration smoke checks passing.
  • A real 118-test pytest project validated with 118/118 matching outcomes in pytest, native serial, and native parallel modes.

Observed timings from that final validation run were 3.120 s for pytest, 2.870 s for native serial, and 2.423 s for native parallel. These are validation timings, not a substitute for the published multi-round benchmark methodology.

Documentation

Testenix v0.1.0 - First public release

Choose a tag to compare

@polishdataengineer polishdataengineer released this 20 Jul 19:10
19ab4ba

Testenix 0.1.0

First public release of Testenix - a native Python testing framework focused on
parallel execution, deterministic reporting, resilience, and safe migration
from pytest and unittest.

Highlights

  • Native parallel Python test execution
  • Async tests and fixtures without additional plugins
  • Retries, timeouts, worker-crash recovery, JSON and JUnit reports
  • Execution of unchanged pytest suites through testenix pytest
  • Safe migration from supported pytest and unittest suites
  • Original tests are never overwritten or deleted
  • Serial and parallel outcome validation before publishing migrated tests
  • Complete SHA-256 source-manifest verification
  • Support for Python 3.11–3.14 on Linux, macOS, and Windows

Installation

pip install testenix