LightRAG/tests/conftest.py
clssck 69358d830d test(lightrag,examples,api): comprehensive ruff formatting and type hints
Format entire codebase with ruff and add type hints across all modules:
- Apply ruff formatting to all Python files (121 files, 17K insertions)
- Add type hints to function signatures throughout lightrag core and API
- Update test suite with improved type annotations and docstrings
- Add pyrightconfig.json for static type checking configuration
- Create prompt_optimized.py and test_extraction_prompt_ab.py test files
- Update ruff.toml and .gitignore for improved linting configuration
- Standardize code style across examples, reproduce scripts, and utilities
2025-12-05 15:17:06 +01:00

137 lines
3.9 KiB
Python

"""
Pytest configuration for LightRAG tests.
This file provides command-line options and fixtures for test configuration.
"""
import pytest
def pytest_configure(config):
"""Register custom markers for LightRAG tests."""
config.addinivalue_line('markers', 'offline: marks tests as offline (no external dependencies)')
config.addinivalue_line(
'markers',
'integration: marks tests requiring external services (skipped by default)',
)
config.addinivalue_line('markers', 'requires_db: marks tests requiring database')
config.addinivalue_line('markers', 'requires_api: marks tests requiring LightRAG API server')
def pytest_addoption(parser):
"""Add custom command-line options for LightRAG tests."""
parser.addoption(
'--keep-artifacts',
action='store_true',
default=False,
help='Keep test artifacts (temporary directories and files) after test completion for inspection',
)
parser.addoption(
'--stress-test',
action='store_true',
default=False,
help='Enable stress test mode with more intensive workloads',
)
parser.addoption(
'--test-workers',
action='store',
default=3,
type=int,
help='Number of parallel workers for stress tests (default: 3)',
)
parser.addoption(
'--run-integration',
action='store_true',
default=False,
help='Run integration tests that require external services (database, API server, etc.)',
)
def pytest_collection_modifyitems(config, items):
"""Modify test collection to skip integration tests by default.
Integration tests are skipped unless --run-integration flag is provided.
This allows running offline tests quickly without needing external services.
"""
if config.getoption('--run-integration'):
# If --run-integration is specified, run all tests
return
skip_integration = pytest.mark.skip(reason='Requires external services(DB/API), use --run-integration to run')
for item in items:
if 'integration' in item.keywords:
item.add_marker(skip_integration)
@pytest.fixture(scope='session')
def keep_test_artifacts(request):
"""
Fixture to determine whether to keep test artifacts.
Priority: CLI option > Environment variable > Default (False)
"""
import os
# Check CLI option first
if request.config.getoption('--keep-artifacts'):
return True
# Fall back to environment variable
return os.getenv('LIGHTRAG_KEEP_ARTIFACTS', 'false').lower() == 'true'
@pytest.fixture(scope='session')
def stress_test_mode(request):
"""
Fixture to determine whether stress test mode is enabled.
Priority: CLI option > Environment variable > Default (False)
"""
import os
# Check CLI option first
if request.config.getoption('--stress-test'):
return True
# Fall back to environment variable
return os.getenv('LIGHTRAG_STRESS_TEST', 'false').lower() == 'true'
@pytest.fixture(scope='session')
def parallel_workers(request):
"""
Fixture to determine the number of parallel workers for stress tests.
Priority: CLI option > Environment variable > Default (3)
"""
import os
# Check CLI option first
cli_workers = request.config.getoption('--test-workers')
if cli_workers != 3: # Non-default value provided
return cli_workers
# Fall back to environment variable
return int(os.getenv('LIGHTRAG_TEST_WORKERS', '3'))
@pytest.fixture(scope='session')
def run_integration_tests(request):
"""
Fixture to determine whether to run integration tests.
Priority: CLI option > Environment variable > Default (False)
"""
import os
# Check CLI option first
if request.config.getoption('--run-integration'):
return True
# Fall back to environment variable
return os.getenv('LIGHTRAG_RUN_INTEGRATION', 'false').lower() == 'true'