https://github.com/afranzi/pytest-dbt-postgres
Unittest DBT Postgres projects
https://github.com/afranzi/pytest-dbt-postgres
dbt postgresql test
Last synced: 4 months ago
JSON representation
Unittest DBT Postgres projects
- Host: GitHub
- URL: https://github.com/afranzi/pytest-dbt-postgres
- Owner: afranzi
- Created: 2023-11-30T08:48:12.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-09-03T12:16:56.000Z (almost 2 years ago)
- Last Synced: 2025-08-09T07:31:38.297Z (11 months ago)
- Topics: dbt, postgresql, test
- Language: Python
- Homepage:
- Size: 103 KB
- Stars: 6
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# PyTest DBT Postgres
This project aims to provide an easy way to validate a DBT project by enabling the
unit-testing capability.
## Dependencies
This project is based on the [pytest-postgresql](https://pypi.org/project/pytest-postgresql/) library, so we can
validate our DBT postgres project without relying on an existing database.
## Usage
The initial idea resides on pytest-postgres providing us an empty and isolated postgres where we can
validate different use-cases with our DBT code.
> If your project uses external sources, you will need to make sure they are properly defined in the yml files, since
> the project generates the DDLs from there.
```python
import unittest
from pytest_dbt_postgres import auto_inject_fixtures
from pytest_dbt_postgres.dbt_executor import DbtExecutor
from pytest_dbt_postgres.dbt_validator import DbtValidator
from pytest_dbt_postgres.postgres.connector import PostgresConnector
from pytest_dbt_postgres.postgres.sql_methods import export_credentials_to_env, get_credentials
dbt_project_dir = '...'
resources_folder = '...'
@auto_inject_fixtures("postgresql")
class TestDbtValidator(unittest.TestCase):
def setUp(self) -> None:
credentials = get_credentials(self.postgresql)
self.connector = PostgresConnector(credentials)
# SETUP
export_credentials_to_env(credentials)
executor = DbtExecutor(dbt_project_dir=dbt_project_dir, profiles_dir=resources_folder)
self.validator = DbtValidator(connector=self.connector, executor=executor, resources_folder=resources_folder)
def test_orders(self) -> None:
# GIVEN
sources_to_load = [
("external.customers", "csv/input/customers.csv"),
("external.orders", "csv/input/orders.csv"),
]
selector = "orders"
outputs_to_validate = [
("dbt_unittest.orders", "csv/output/orders.csv"),
]
# THEN
self.validator.validate(sources_to_load, selector, outputs_to_validate)
```