Testare il codice Airflow

Creare data pipeline con Airflow

Volker Janz

Senior Developer Advocate at Astronomer

Tre livelli di test

Piramide dei test dei Dag

  • Integrità: il Dag si carica senza errori?
  • Unità: la business logic produce risultati corretti?
  • Integrazione: l'intero Dag gira end-to-end?
Creare data pipeline con Airflow

Test di integrità con DagBag

from airflow.models import DagBag

dag_bag = DagBag(include_examples=False)
def test_no_import_errors(): assert len(dag_bag.import_errors) == 0
def test_dag_loaded(): assert "daily_etl" in dag_bag.dags
Creare data pipeline con Airflow

Perché i Dag falliscono all'import

ModuleNotFoundError

  • ModuleNotFoundError: provider mancante o path di import errato
  • NameError: variabile o funzione rinominata, o refuso
  • ImportError: import circolari tra file del Dag
  • I test di integrità aiutano a evitarli
Creare data pipeline con Airflow

Unit test delle funzioni dei task

Nel file del Dag:

def clean_record(record):
    return {
        "name": record["name"].strip(),
        "email": record["email"].lower(),
    }

@task
def transform(records):
    return [clean_record(r)
            for r in records]
  • Estrai la business logic

Nel file di test:

from dags.data_cleaning import (
    clean_record,
)

def test_strips_whitespace():
    result = clean_record(
      {"name": "  Alice  ",
       "email": "[email protected]"}
    )
    assert result["name"] == "Alice"
  • Concentrati nei test unitari sulla business logic
Creare data pipeline con Airflow

Test di integrazione con dag.test()

import pytest
from airflow.models import DagBag
from pendulum import datetime

dag_bag = DagBag(include_examples=False)

def test_etl_pipeline(): dag = dag_bag.get_dag("etl_output") assert dag is not None dag.test(logical_date=datetime(2026, 1, 15)) output = Path("/tmp/etl_results.json") assert output.exists() results = json.loads(output.read_text()) assert len(results) == 2
  • Esegui il Dag reale con input controllati e valida l'output
Creare data pipeline con Airflow

Test in CI

Pipeline CI

  • Integrità + unità: a ogni commit (veloci)
  • Integrazione: pull request o nightly (più lenti)
  • Nessun Dag va in produzione senza passare tutti e tre
Creare data pipeline con Airflow

Esercitiamoci!

Creare data pipeline con Airflow

Preparing Video For Download...