Unittests für eine Datenpipeline

ETL und ELT mit Python

Jake Roach

Data Engineer

Datenpipeline mit Unittests validieren

Unittests:

  • Häufig in Software-Engineering-Workflows
  • Stellen sicher, dass Code wie erwartet läuft
  • Helfen, Daten zu validieren

Typischer Validierungs-Workflow für Datenpipelines mit Unit- und End-to-End-Tests.

ETL und ELT mit Python

pytest für Unittests

from pipeline import extract, transform, load

# Schreibe einen Unit-Test, der den Typ von clean_stock_data prüft
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 und ELT mit Python

assert und isinstance

pipeline_type = "ETL"

# Prüfen, ob pipeline_type eine str-Instanz ist
isinstance(pipeline_type, str)
True
# Sicherstellen, dass die Pipeline den Wert "ETL" hat
assert pipeline_type == "ETL"
# assert und isinstance kombinieren
assert isinstance(pipeline_type, str)
ETL und ELT mit Python

AssertionError

pipeline_type = "ETL"

# Einen AssertionError auslösen
assert isinstance(pipeline_type, float)
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
AssertionError
ETL und ELT mit Python

Pipeline-Komponenten mit Fixtures mocken

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 und ELT mit Python

Unittests für DataFrames

def test_transformed_data(clean_data):
    # Weitere Assert-Statements hier einfügen
    ...

    # Anzahl der Spalten prüfen
    assert len(clean_data.columns) == 4

    # Untere Grenze einer Spalte prüfen
    assert clean_data["open"].min() >= 0

    # Bereich einer Spalte mit "and" verketten
    assert clean_data["open"].min() >= 0 and clean_data["open"].max() <= 1000

ETL und ELT mit Python

Lass uns üben!

ETL und ELT mit Python

Preparing Video For Download...