[Python] While testing with airflow, to see task.run, task.execute but I got an error

Discussão em 'Python' iniciado por Stack, Maio 5, 2025.

  1. Stack

    Stack Membro Participativo

    While testing airflow with pytest, i got an Error.

    import datetime
    import pytest

    from airflow.models import BaseOperator, TaskInstance
    from airflow.models.dag import DAG
    from airflow.utils.types import DagRunType
    from airflow.utils.state import DagRunState, TaskInstanceState
    from airflow.utils import timezone

    class SampleOperator(BaseOperator):
    template_fields = ("_start_date", "_end_date")

    def __init__(self, start_date, end_date, **kwargs):
    super().__init__(**kwargs)
    self._start_date = start_date
    self._end_date = end_date

    def execute(self, context):
    return context

    @pytest.fixture
    def dag():
    with DAG(
    dag_id="test_dag_id",
    schedule=None,
    default_args={
    "owner": "airflow",
    "start_date": datetime.datetime(2025, 4, 5),
    "end_date": datetime.datetime(2025, 4, 6)
    }
    ) as dag:

    SampleOperator(
    task_id="test_task_id",
    start_date="{{ prev_ds }}",
    end_date="{{ ds }}"
    )

    return dag


    def test_execute(dag):
    run_id = f"test_run_id"
    dagrun = dag.create_dagrun(
    data_interval=(
    dag.default_args["start_date"],
    dag.default_args["end_date"]
    ),
    run_id=run_id,
    start_date=dag.default_args["end_date"],
    state=DagRunState.RUNNING,
    run_type=DagRunType.MANUAL
    )

    ti = dagrun.get_task_instance(task_id="test_task_id")
    assert ti is not None # error here, ti is None



    But task is None My airflow version is 2.10.5

    Here is the Error

    ti = dagrun.get_task_instance(task_id="test_task_id")
    > assert ti is not None
    E assert None is not None

    tests/test_instance_context.py:59: AssertionError


    I referenced the code https://airflow.apache.org/docs/apache-airflow/2.10.5/best-practices.html#testing-a-dag

    But I don't know why..

    I want to test task.run to see difference between task.run and task.execute. when I passed jinja variables, then airflow automatically rendering the variables by run method.

    So, I want to see prev_ds, ds, start_date, end_date is successfully rendered. But I got an error above..

    Continue reading...

Compartilhe esta Página