Skip to main content

Reusable configuration and artifact utilities for building pytest plugins

Project description

Release Notes Downloads GitHub CI Status License: MIT

Reusable pytest Plugin Utilities

Building pytest plugins means dealing with the same problems repeatedly: managing configuration options with proper precedence (CLI vs INI vs defaults), creating per-test artifact directories, and sanitizing test names for filesystem paths. This package extracts those common patterns into reusable utilities.

I created this after extracting the config and path handling logic from pytest-playwright-artifacts. Rather than reinvent option handling in every plugin, you can use these utilities to get consistent behavior across pytest plugins.

Installation

uv add pytest-plugin-utils

Usage

Configuration Options

Register pytest options with automatic precedence handling (runtime > CLI > INI > defaults) and type inference.

For Plugin Authors

from pytest_plugin_utils import set_pytest_option, register_pytest_options, get_pytest_option

def pytest_addoption(parser):
    # Define your options (use __package__ for namespace)
    set_pytest_option(
        __package__,
        "api_url",
        default="http://localhost:3000",
        help="API base URL",
        available="all",  # Expose via CLI and INI
        type_hint=str,
    )

    # Register them with pytest
    register_pytest_options(__package__, parser)

def pytest_configure(config):
    # Retrieve with automatic type casting
    api_url = get_pytest_option(__package__, config, "api_url", type_hint=str)

For Plugin Users

Once a plugin has registered options using this package, users can configure them in three ways (in order of precedence):

  1. Command Line (highest priority):

    pytest --api-url=https://prod.example.com
    
  2. INI Configuration (medium priority):

    In pytest.ini:

    [pytest]
    api_url = https://staging.example.com
    

    Or in pyproject.toml:

    [tool.pytest.ini_options]
    api_url = "https://staging.example.com"
    
  3. Runtime/Programmatic (via conftest.py):

    def pytest_configure(config):
        # Override at runtime
        config.option.api_url = "https://custom.example.com"
    

The value resolution follows this precedence chain, with each level overriding the next: Runtime > CLI > INI > Default.

Artifact Directory Management

Create per-test artifact directories with sanitized names:

from pytest_plugin_utils import set_artifact_dir_option, get_artifact_dir

def pytest_configure(config):
    # Configure which option name to use (use __package__ for namespace)
    set_artifact_dir_option(__package__, "my_plugin_output")

def pytest_runtest_setup(item):
    # Get a clean directory for this specific test
    artifact_dir = get_artifact_dir(__package__, item)
    # Returns: /output/test-file-py-test-name-param/

Features

  • Centralized option registry with runtime, CLI, and INI support
  • Automatic INI type inference from Python type hints (bool, str, list[str], list[Path])
  • Smart value casting with fallback precedence handling
  • Filesystem-safe test name sanitization for artifact paths
  • Per-test artifact directory creation and resolution
  • Type-safe configuration retrieval with warnings on mismatches

Related Projects

MIT License


This project was created from iloveitaly/python-package-template

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

pytest_plugin_utils-0.1.1.tar.gz (6.4 kB view details)

Uploaded Source

Built Distribution

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

pytest_plugin_utils-0.1.1-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file pytest_plugin_utils-0.1.1.tar.gz.

File metadata

  • Download URL: pytest_plugin_utils-0.1.1.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","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

Hashes for pytest_plugin_utils-0.1.1.tar.gz
Algorithm Hash digest
SHA256 9e29969496ae7b7e16dc828f274faf942cfcdd6c3241eabd09a94ebe37ce663e
MD5 5535d51feaa0ec62d4d9be49459d19da
BLAKE2b-256 ddc3dbe520ee796f8e1d2958853fd9bb2331db8cd7e7ed8eb0d40170292eb9c1

See more details on using hashes here.

File details

Details for the file pytest_plugin_utils-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: pytest_plugin_utils-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 7.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","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

Hashes for pytest_plugin_utils-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5fe56e8b672adc68287020239b13965984dbc5e5f136d518c916f3a4b60b438b
MD5 dcbb3c7710b0b10b99b483c31628787e
BLAKE2b-256 193cce24184f11bbfd4b89f177e7e480c51effc97d97348d8738b50b92cc71ac

See more details on using hashes here.

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