Skip to content

Pytest: Test Framework

Tool: pytest

pytest is the foundational testing framework for Python applications and libraries. Zenith enhances pytest with an integrated ecosystem of specialized plugins that enforce assertion rigor, prevent state flakiness, and accelerate parallel execution.

What It Does

pytest provides a powerful, fixture-driven testing engine with deep assertion introspection. Tests are authored as idiomatic Python functions, leveraging dependency injection via fixtures, parameterized test matrices, and comprehensive filter mechanisms to target specific subsystems.

Zenith configures pytest with strict validation flags: tests must declare valid markers, configuration files are strictly validated, doctests inside source docstrings are automatically executed, and unused snapshot assertions trigger warnings.

Why It's in Zenith

Testing in Zenith is designed to eliminate false confidence. Beyond standard unit assertions, pytest operates under a strict zero-warning tolerance policy (filterwarnings = "error"). Deprecation notices, unclosed resources, or encoding anomalies fail the test suite immediately.

By pairing pytest with specialized plugins, Zenith transforms the test runner into a comprehensive verification engine: parallel execution keeps local test runs fast, randomized ordering eliminates state pollution between tests, and snapshot and property-based plugins catch edge-case regressions that manual test cases often miss.

Integrated Pytest Plugins

Zenith integrates a curated set of plugins into the test environment:

Plugin Role Primary Guarantee
pytest-cov Coverage Integration Bridges pytest with Coverage.py to track execution and enforce 100% statement and branch coverage.
pytest-xdist Parallel Execution Distributes test runs across available CPU cores (uv run poe test-fast via -n auto), accelerating local and CI feedback loops.
pytest-randomly Test Order Shuffling Randomizes execution sequences on every run to detect global state leakage, unclosed resources, or order-dependent assertions.
pytest-sugar Terminal Diagnostics Replaces default dot progress with an interactive progress meter and surfaces test failures immediately as they occur.
syrupy Snapshot Testing Provides declarative snapshot fixtures (snapshot) that assert structured outputs (CLI menus, JSON payloads, AST trees) against versioned .ambr files.
hypothesis Property-Based Testing Generates hundreds of pseudo-random inputs to find hidden edge cases, boundary errors, and numeric overflow traps across algorithmic functions.

Configuration in Zenith

Configured in pytest.ini at the project root:

# ==============================================================================
# Pytest Configuration (pytest.ini)
#
# Tool: Pytest (https://docs.pytest.org/)
# Purpose: The standard testing framework for Python applications and libraries.
# Why it's in Zenith: Configured with verbose outputs, doctest discovery, strict
# config/marker checks, import isolation, zero-tolerance warning gates, and
# integration with pytest-cov for coverage measurement on every test run.
# ==============================================================================

[pytest]
addopts                = -q -ra --durations=3 -p no:legacypath --doctest-modules --import-mode=importlib --strict-config --strict-markers --snapshot-warn-unused
# Uncomment when using pytest-asyncio (0.24+) to configure default fixture loop scope:
# asyncio_default_fixture_loop_scope = function
collect_imported_tests = false
console_output_style   = classic
empty_parameter_set_mark = fail_at_collect
faulthandler_timeout   = 60
log_format             = %(asctime)s [%(levelname)8s] %(name)s: %(message)s (%(filename)s:%(lineno)s)
log_level              = DEBUG
minversion             = 9.0
strict                 = true
testpaths              = tests src
xfail_strict           = true
filterwarnings         =
    error
    ignore::coverage.exceptions.CoverageWarning
    ignore::DeprecationWarning:typer.*
    ignore::DeprecationWarning:click.*
    default::EncodingWarning
    error::EncodingWarning:{{ cookiecutter.package_name }}.*
doctest_optionflags    =
    DONT_ACCEPT_TRUE_FOR_1
    NORMALIZE_WHITESPACE
    ELLIPSIS

Key Invocations

uv run poe test                 # Run complete test suite with 100% coverage
uv run poe test-fast            # Run tests in parallel with pytest-xdist
uv run poe test-lowest          # Verify against lowest-direct dependencies
uv run poe test-snapshot-update # Update Syrupy snapshots (.ambr files)
uv run pytest -k "test_filter"  # Run filtered subset of tests

Upstream Documentation