Files
py-dvt-ate/src/py_dvt_ate/framework/context.py
2025-08-31 17:24:16 +00:00

112 lines
3.4 KiB
Python

"""Test framework context and interface definitions.
This module defines the core abstractions for the test executive framework:
- TestContext: Runtime context passed to tests during execution
- ITest: Abstract base class that all DVT tests must implement
The test framework orchestrates test execution, measurement logging, and
result evaluation against limits.
"""
from abc import ABC, abstractmethod
from dataclasses import dataclass
from typing import TYPE_CHECKING, Any
from uuid import UUID
from py_dvt_ate.data.models import TestStatus
if TYPE_CHECKING:
# Avoid circular imports while maintaining type checking
from py_dvt_ate.framework.logger import ITestLogger
from py_dvt_ate.instruments.factory import InstrumentSet
@dataclass
class TestContext:
"""Runtime context for test execution.
Provides access to instruments, logging, and configuration during test
execution. Passed to each test's execute() method.
Attributes:
run_id: Unique identifier for this test run (UUID).
instruments: Hardware abstraction layer providing access to all instruments.
logger: Test logger for recording measurements and events.
config: Test-specific configuration dictionary.
"""
run_id: UUID
instruments: "InstrumentSet"
logger: "ITestLogger"
config: dict[str, Any]
class ITest(ABC):
"""Abstract base class for DVT test implementations.
All characterisation tests must inherit from this class and implement
the required properties and methods. The test runner uses these to
discover, describe, and execute tests.
Example:
class TempCoTest(ITest):
@property
def name(self) -> str:
return "tempco"
@property
def description(self) -> str:
return "Output voltage temperature coefficient"
def execute(self, context: TestContext) -> TestStatus:
# Test implementation...
return TestStatus.PASSED
"""
@property
@abstractmethod
def name(self) -> str:
"""Return the unique test identifier.
Used for test discovery and selection. Should be lowercase,
alphanumeric with underscores (e.g., "tempco", "load_regulation").
Returns:
Unique test name string.
"""
pass
@property
@abstractmethod
def description(self) -> str:
"""Return a human-readable test description.
Describes what the test measures or characterises. Displayed in
reports and user interfaces.
Returns:
Brief description of the test purpose.
"""
pass
@abstractmethod
def execute(self, context: TestContext) -> TestStatus:
"""Execute the test with the given context.
Contains the test logic: configure instruments, take measurements,
log results, and evaluate pass/fail. The test should use the
context.logger to record measurements and context.instruments to
control equipment.
Args:
context: Runtime context with instruments, logger, and config.
Returns:
Final test status (PASSED, FAILED, ERROR, etc.).
Raises:
Exception: If a critical error occurs during test execution.
The test runner will catch this and mark the test as ERROR.
"""
pass