Testando código no Airflow

Criando Pipelines de Dados com Airflow

Volker Janz

Senior Developer Advocate at Astronomer

Três níveis de testes

Pirâmide de testes de Dag

  • Integridade: o Dag carrega sem erros?
  • Unitário: a lógica de negócio gera resultados corretos?
  • Integração: o Dag completo roda de ponta a ponta?
Criando Pipelines de Dados com Airflow

Testes de integridade com 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
Criando Pipelines de Dados com Airflow

Por que Dags quebram ao importar

ModuleNotFoundError

  • ModuleNotFoundError: pacote de provider ausente ou caminho de import incorreto
  • NameError: variável/função renomeada ou erro de digitação
  • ImportError: imports circulares entre arquivos de Dag
  • Testes de integridade ajudam a evitar esses problemas
Criando Pipelines de Dados com Airflow

Testando funções de tarefa (unitário)

No arquivo do 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]
  • Extraia a lógica de negócio

No arquivo de teste:

from dags.data_cleaning import (
    clean_record,
)

def test_strips_whitespace():
    result = clean_record(
      {"name": "  Alice  ",
       "email": "[email protected]"}
    )
    assert result["name"] == "Alice"
  • Foque os testes unitários na lógica de negócio
Criando Pipelines de Dados com Airflow

Testes de integração com 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
  • Rode o Dag real com entrada controlada e valide a saída
Criando Pipelines de Dados com Airflow

Testando no CI

Pipeline de CI

  • Integridade + unitário: a cada commit (rápido)
  • Integração: pull requests ou nightly (mais lento)
  • Nenhum Dag vai para produção sem passar pelos três
Criando Pipelines de Dados com Airflow

Vamos praticar!

Criando Pipelines de Dados com Airflow

Preparing Video For Download...