{"library":"pytest-fixture-config","title":"pytest-fixture-config","description":"pytest-fixture-config is a pytest plugin that provides utility functions for configuring Py.test fixtures. It enables the creation of simple configuration objects for fixtures, allowing tests to be skipped dynamically if required configuration variables are not set. The library is part of the larger `man-group/pytest-plugins` monorepo, is currently in version 1.8.0, and maintains an active release cadence with frequent updates.","language":"python","status":"active","last_verified":"Mon May 18","install":{"commands":["pip install pytest-fixture-config"],"cli":null},"imports":["from pytest_fixture_config import Config","from pytest_fixture_config import requires_config","from pytest_fixture_config import yield_requires_config"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nimport pytest\nimport subprocess\nfrom pytest_fixture_config import Config, requires_config\n\n# 1. Define your configuration class inheriting from Config\nclass MyAppConfig(Config):\n    __slots__ = ('api_key', 'base_url') # Define expected config attributes\n\n# 2. Create a singleton instance, reading from environment variables\nAPP_CONFIG = MyAppConfig(\n    api_key=os.environ.get('MY_APP_API_KEY'), # No default, required\n    base_url=os.environ.get('MY_APP_BASE_URL', 'https://api.example.com') # With default\n)\n\n# 3. Use requires_config decorator to make fixtures dependent on config\n@pytest.fixture\n@requires_config(APP_CONFIG, ['api_key'])\ndef authenticated_client():\n    \"\"\"Provides an authenticated client if API_KEY is set.\"\"\"\n    print(f\"\\nUsing API Key: {APP_CONFIG.api_key[:5]}... and Base URL: {APP_CONFIG.base_url}\")\n    # In a real app, this would initialize an API client\n    class MockClient:\n        def fetch_data(self): return {\"status\": \"data_fetched\"}\n    return MockClient()\n\ndef test_data_fetch(authenticated_client):\n    \"\"\"This test requires a valid API_KEY to run.\"\"\"\n    assert authenticated_client.fetch_data() == {\"status\": \"data_fetched\"}\n\n# To run this example:\n# 1. Save as `test_app.py`\n# 2. Run: `pytest -s test_app.py` (it will be skipped)\n# 3. Set env var: `export MY_APP_API_KEY=\"your_secret_key\"`\n# 4. Run again: `pytest -s test_app.py` (it should pass)","lang":"python","description":"This quickstart demonstrates how to define a configuration class using `pytest_fixture_config.Config`, populate it from environment variables, and use the `requires_config` decorator to create fixtures that conditionally skip tests if necessary configuration values are not provided. This ensures tests requiring specific setups only run when their prerequisites are met.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-18","installed_version":"1.8.0","pypi_latest":"1.8.0","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":2.7,"avg_import_s":0.46,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pytest-fixture-config","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.45,"mem_mb":12.2,"disk_size":"30.6M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pytest-fixture-config","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.7,"import_time_s":0.34,"mem_mb":12.2,"disk_size":"31M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pytest-fixture-config","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.58,"mem_mb":12.9,"disk_size":"33.6M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pytest-fixture-config","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.6,"import_time_s":0.54,"mem_mb":12.9,"disk_size":"34M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pytest-fixture-config","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.54,"mem_mb":12.8,"disk_size":"25.2M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pytest-fixture-config","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.5,"import_time_s":0.51,"mem_mb":12.8,"disk_size":"26M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pytest-fixture-config","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.47,"mem_mb":11.8,"disk_size":"24.9M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pytest-fixture-config","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.6,"import_time_s":0.44,"mem_mb":11.8,"disk_size":"25M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pytest-fixture-config","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.38,"mem_mb":11.3,"disk_size":"30.0M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pytest-fixture-config","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.2,"import_time_s":0.32,"mem_mb":11.3,"disk_size":"30M"}]}}