Unit-tests voor een datapijplijn

ETL en ELT in Python

Jake Roach

Data Engineer

Een datapijplijn valideren met unit-tests

Unit-tests:

  • Veelgebruikt in software-engineering
  • Controleren of code werkt zoals verwacht
  • Helpen data te valideren

Typisch validatiekader voor datapijplijnen met unit-testing en end-to-end-testing.

ETL en ELT in Python

pytest voor unit-testing

from pipeline import extract, transform, load

# Bouw een unit-test die het type van clean_stock_data checkt
def test_transformed_data():
    raw_stock_data = extract("raw_stock_data.csv")
    clean_stock_data = transform(raw_data)
    assert isinstance(clean_stock_data, pd.DataFrame)
> python -m pytest

test_transformed_data .                                                     [100%]
================================ 1 passed in 1.17s ===============================
ETL en ELT in Python

assert en isinstance

pipeline_type = "ETL"

# Check of pipeline_type een instance van str is
isinstance(pipeline_type, str)
True
# Assert dat de pipeline inderdaad de waarde "ETL" heeft
assert pipeline_type == "ETL"
# Combineer assert en isinstance
assert isinstance(pipeline_type, str)
ETL en ELT in Python

AssertionError

pipeline_type = "ETL"

# Maak een AssertionError
assert isinstance(pipeline_type, float)
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
AssertionError
ETL en ELT in Python

Pipelinecomponenten mocken met fixtures

import pytest

@pytest.fixture()
def clean_data():
    raw_stock_data = extract("raw_stock_data.csv")
    clean_stock_data = transform(raw_data)
    return clean_stock_data
def test_transformed_data(clean_data):
    assert isinstance(clean_data, pd.DataFrame)
ETL en ELT in Python

Unit-tests voor DataFrames

def test_transformed_data(clean_data):
    # Include other assert statements here
    ...

    # Check number of columns
    assert len(clean_data.columns) == 4

    # Check the lower bound of a column
    assert clean_data["open"].min() >= 0

    # Check the range of a column by chaining statements with "and"
    assert clean_data["open"].min() >= 0 and clean_data["open"].max() <= 1000

ETL en ELT in Python

Laten we oefenen!

ETL en ELT in Python

Preparing Video For Download...