Tester un pipeline de données avec des tests unitaires

ETL et ELT en Python

Jake Roach

Data Engineer

Valider un pipeline de données avec des tests unitaires

Tests unitaires :

  • Courants dans les workflows d’ingénierie logicielle
  • Vérifient que le code fonctionne comme prévu
  • Aident à valider les données

Cadre typique de validation d’un pipeline de données, incluant tests unitaires et de bout en bout.

ETL et ELT en Python

pytest pour les tests unitaires

from pipeline import extract, transform, load

# Build a unit test, asserting the type of clean_stock_data
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 et ELT en Python

assert et isinstance

pipeline_type = "ETL"

# Check if pipeline_type is an instance of a str
isinstance(pipeline_type, str)
True
# Assert that the pipeline does indeed take value "ETL"
assert pipeline_type == "ETL"
# Combine assert and isinstance
assert isinstance(pipeline_type, str)
ETL et ELT en Python

AssertionError

pipeline_type = "ETL"

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

Simuler des composants de pipeline avec des 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 et ELT en Python

Tester des DataFrames avec des tests unitaires

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 et ELT en Python

Passons à la pratique !

ETL et ELT en Python

Preparing Video For Download...