Skip to main content

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 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.

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)

Release files for pytest-dbt-postgres 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pytest-dbt-postgres 0.2.0
File Size Uploaded
pytest_dbt_postgres-0.2.0.tar.gz 5.1 kB Details

Release files / pytest_dbt_postgres-0.2.0.tar.gz

Download URL pytest_dbt_postgres-0.2.0.tar.gz
Size 5.1 kB
Tags Source
SHA-256 checksum
How to use checksums
94368c9386386fbbb4f7174688a3860e7b69ae4a36ba22b12f7f7d782e7a8693
BLAKE2b-256 checksum
How to use checksums
742280afb039f489fce47ba9dc9f262b9d16c1a24d0596d1db103659ecf658e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.3 CPython/3.10.14 Linux/6.5.0-1025-azure

Release history Release notifications | RSS feed

This release

0.2.0 This release

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page