diff --git a/integration_tests/tests/conftest.py b/integration_tests/tests/conftest.py index 257854ccf..579c5f70e 100644 --- a/integration_tests/tests/conftest.py +++ b/integration_tests/tests/conftest.py @@ -6,7 +6,7 @@ import pytest import yaml from dbt.version import __version__ as dbt_version -from dbt_project import DbtProject +from dbt_project import PYTEST_XDIST_WORKER, SCHEMA_NAME_SUFFIX, DbtProject from elementary.clients.dbt.factory import RunnerMethod from env import Environment from logger import get_logger @@ -90,10 +90,17 @@ def init_tests_env( ): env = Environment(target, project_dir_copy, runner_method) if not skip_init: - logger.info("Initializing test environment") + logger.info( + "Initializing test environment (worker=%s, schema_suffix='%s')", + PYTEST_XDIST_WORKER or "main", + SCHEMA_NAME_SUFFIX, + ) env.clear() env.init() - logger.info("Initialization complete") + logger.info( + "Initialization complete (worker=%s)", + PYTEST_XDIST_WORKER or "main", + ) yield diff --git a/integration_tests/tests/data_seeder.py b/integration_tests/tests/data_seeder.py index dfba10100..f89c0c5eb 100644 --- a/integration_tests/tests/data_seeder.py +++ b/integration_tests/tests/data_seeder.py @@ -29,7 +29,21 @@ def seed(self, data: List[dict], table_name: str) -> Generator[None, None, None] writer.writeheader() writer.writerows(data) seed_file.flush() - self.dbt_runner.seed(select=str(relative_seed_path), full_refresh=True) + success = self.dbt_runner.seed( + select=str(relative_seed_path), full_refresh=True + ) + if not success: + logger.error( + "dbt seed failed for '%s'. This usually means the " + "target schema does not exist or could not be created. " + "Downstream queries will fail with " + "TABLE_OR_VIEW_NOT_FOUND.", + table_name, + ) + raise RuntimeError( + f"dbt seed failed for '{table_name}'. Check the dbt " + f"output above for the root cause (e.g. SCHEMA_NOT_FOUND)." + ) yield finally: diff --git a/integration_tests/tests/env.py b/integration_tests/tests/env.py index b5d108d25..0ed9f7c5e 100644 --- a/integration_tests/tests/env.py +++ b/integration_tests/tests/env.py @@ -2,6 +2,9 @@ import dbt_project from elementary.clients.dbt.factory import RunnerMethod +from logger import get_logger + +logger = get_logger(__name__) class Environment: @@ -22,5 +25,27 @@ def clear(self): self.dbt_runner.run_operation("elementary_tests.clear_env") def init(self): - self.dbt_runner.run(selector="init") - self.dbt_runner.run(select="elementary") + init_success = self.dbt_runner.run(selector="init") + if not init_success: + logger.error( + "Environment init failed: 'dbt run --selector init' returned " + "failure. The target schema may not have been created. " + "Subsequent seeds and queries will likely fail with " + "SCHEMA_NOT_FOUND or TABLE_OR_VIEW_NOT_FOUND." + ) + raise RuntimeError( + "Test environment initialization failed during " + "'dbt run --selector init'. Check the dbt output above " + "for the root cause." + ) + elementary_success = self.dbt_runner.run(select="elementary") + if not elementary_success: + logger.error( + "Environment init failed: 'dbt run --select elementary' " + "returned failure. Elementary models may not be available." + ) + raise RuntimeError( + "Test environment initialization failed during " + "'dbt run --select elementary'. Check the dbt output " + "above for the root cause." + )