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.2.0.tar.gz (6.5 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.2.0-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pytest_plugin_utils-0.2.0.tar.gz
  • Upload date:
  • Size: 6.5 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.2.0.tar.gz
Algorithm Hash digest
SHA256 80dd6b769dc97753d9989192ce163b16cb070dc711a906a2141cc5c2ddad96df
MD5 30f3562c3b83fa753452f5e03484bb25
BLAKE2b-256 bfc9f0f9f8a19f94b0048d02ff1d1df76927d1fdda39e3ba8c23654dd0b917cd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pytest_plugin_utils-0.2.0-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.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bd1fad6854b4fd3de687195e6c3c95c429192507ae8ed8d67fc580fcb18bc254
MD5 4f7fdc13a326f25da96b7b80ba471d8a
BLAKE2b-256 fa67acf88425740327489441fd8bc4d5787f38fd3b9e829abab47ed0d743277d

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