feat: enhance E2E testing setup and model reporting

- Added a new fixture to manage runtime report artifacts in a writable temp directory during E2E tests, addressing permission issues in local CI/dev environments.
- Updated `conftest.py` to include a requirements.txt file in the model packaging path for training activities.
- Refactored existing fixtures to use `pytest.fixture` instead of `pytest_asyncio.fixture` for better compatibility.
- Enhanced the `Reports` class to include a target alias for report metrics, ensuring compatibility with Evidently's reporting requirements.
- Introduced new test scenarios to validate the handling of missing and whitespace-only `date_column` inputs in the training workflow.

These changes improve the robustness of the E2E testing framework and enhance the clarity of model reporting metrics.
This commit is contained in:
vitor-aignosi
2026-05-05 10:59:51 -03:00
parent ba9eb3d7c7
commit d1f9394879
29 changed files with 255 additions and 182 deletions

View File

@@ -136,6 +136,11 @@ def test_experiment_tracking_del_with_engine_exception(
et.engine = MagicMock()
class MockSuperWithError:
_should_raise: bool
def __init__(self) -> None:
self._should_raise = False
def __del__(self):
# Only raise error if not being cleaned up by garbage collector
# This prevents the PytestUnraisableExceptionWarning
@@ -215,7 +220,7 @@ def test_update_experiment_run_status_success(
mock_execute(*args, **kwargs)
return {'rowcount': 1}
et._execute_update = mock_execute_update
et._execute_update = mock_execute_update # type: ignore[method-assign]
et.info = MagicMock()
input_data = {
@@ -293,7 +298,7 @@ def test_update_experiment_run_status_with_error_success(
mock_execute(*args, **kwargs)
return {'rowcount': 1}
et._execute_update = mock_execute_update
et._execute_update = mock_execute_update # type: ignore[method-assign]
et.info = MagicMock()
input_data = {
@@ -339,7 +344,7 @@ def test_update_experiment_run_status_with_error_truncate_message(
mock_execute(*args, **kwargs)
return {'rowcount': 1}
et._execute_update = mock_execute_update
et._execute_update = mock_execute_update # type: ignore[method-assign]
et.info = MagicMock()
long_error = 'x' * 2000
@@ -416,7 +421,7 @@ def test_update_experiment_run_model_saved_success(
mock_execute(*args, **kwargs)
return {'rowcount': 1}
et._execute_update = mock_execute_update
et._execute_update = mock_execute_update # type: ignore[method-assign]
et.info = MagicMock()
input_data = {
@@ -526,7 +531,7 @@ def test_update_experiment_run_no_rows_updated(
def mock_execute_update(*args, **kwargs):
return {'rowcount': 0}
et._execute_update = mock_execute_update
et._execute_update = mock_execute_update # type: ignore[method-assign]
et.send_notification = MagicMock()
input_data = {