Bird
Raised Fist0
Apache Airflowdevops~5 mins

Unit testing DAGs in Apache Airflow - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main goal of unit testing DAGs in Airflow?
To verify that individual parts of the DAG, like tasks and dependencies, work correctly without running the entire workflow.
Click to reveal answer
beginner
Which Python module is commonly used to write unit tests for Airflow DAGs?
The unittest module is commonly used for writing unit tests in Python, including for Airflow DAGs.
Click to reveal answer
intermediate
How can you check if all tasks in a DAG are correctly defined in a unit test?
By asserting the presence of expected task IDs in the DAG's task_ids set during the test.
Click to reveal answer
intermediate
Why should unit tests for DAGs avoid running actual task logic?
Because unit tests focus on structure and configuration, not execution. Running tasks can be slow and cause side effects.
Click to reveal answer
intermediate
What is a simple way to test task dependencies in an Airflow DAG?
Check the upstream_task_ids and downstream_task_ids properties of tasks to confirm correct order.
Click to reveal answer
What does a unit test for an Airflow DAG usually verify?
AExecution of all tasks end-to-end
BTask definitions and dependencies
CDatabase connections
DUser interface of Airflow
Which Python feature helps isolate DAG tests from actual task execution?
AMocking
BLoops
CRecursion
DDecorators
How do you access all tasks in an Airflow DAG object?
Adag.all_tasks
Bdag.get_tasks()
Cdag.task_list
Ddag.tasks
What is a common Python testing framework used with Airflow DAGs?
APandas
BFlask
Cunittest
DDjango
Why avoid running actual tasks in DAG unit tests?
ATo keep tests fast and side-effect free
BBecause tasks never fail
CBecause Airflow does not allow it
DTo test the Airflow UI
Explain how you would write a unit test to verify task dependencies in an Airflow DAG.
Think about how tasks connect to each other in the DAG.
You got /3 concepts.
    Describe why mocking is useful when unit testing Airflow DAGs.
    Consider what happens if tasks run during tests.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of unit testing DAGs in Airflow?
      easy
      A. To catch errors early before running workflows
      B. To deploy DAGs to production automatically
      C. To monitor task execution times
      D. To schedule DAG runs at specific times

      Solution

      1. Step 1: Understand unit testing purpose

        Unit testing is done to find bugs or errors early in code before actual execution.
      2. Step 2: Apply this to Airflow DAGs

        Unit testing DAGs helps catch errors in DAG definitions before running workflows in Airflow.
      3. Final Answer:

        To catch errors early before running workflows -> Option A
      4. Quick Check:

        Unit testing = catch errors early [OK]
      Hint: Unit tests find bugs before running DAGs [OK]
      Common Mistakes:
      • Confusing unit testing with deployment
      • Thinking unit tests schedule DAGs
      • Mixing monitoring with testing
      2. Which Python code snippet correctly loads DAGs for unit testing using Airflow's DagBag?
      easy
      A. dagbag = DagBag.load('/path/to/dags')
      B. dagbag = DagBag(dag_folder='/path/to/dags')
      C. dagbag = DagBag(folder='/path/to/dags')
      D. dagbag = DagBag.get('/path/to/dags')

      Solution

      1. Step 1: Recall DagBag constructor usage

        DagBag takes a keyword argument dag_folder to specify DAGs folder path.
      2. Step 2: Check each option

        Only dagbag = DagBag(dag_folder='/path/to/dags') uses correct syntax. Others use invalid methods (A,D) or incorrect keyword argument like folder (B).
      3. Final Answer:

        dagbag = DagBag(dag_folder='/path/to/dags') -> Option B
      4. Quick Check:

        DagBag(dag_folder=...) correct syntax [OK]
      Hint: Use dag_folder keyword to load DAGs in DagBag [OK]
      Common Mistakes:
      • Using incorrect keyword argument (e.g., folder)
      • Using non-existent methods like load() or get()
      • Omitting dag_folder keyword
      3. Given this test code snippet, what will be the output if the DAG named 'example_dag' has 3 tasks?
      dagbag = DagBag(dag_folder='dags')
      dag = dagbag.get_dag('example_dag')
      print(len(dag.tasks))
      medium
      A. None
      B. 0
      C. 3
      D. Error: DAG not found

      Solution

      1. Step 1: Load DAG using DagBag

        DagBag loads DAGs from 'dags' folder; get_dag('example_dag') returns the DAG object if found.
      2. Step 2: Count tasks in the DAG

        len(dag.tasks) returns the number of tasks in the DAG, which is 3 as given.
      3. Final Answer:

        3 -> Option C
      4. Quick Check:

        len(dag.tasks) = 3 [OK]
      Hint: len(dag.tasks) gives task count [OK]
      Common Mistakes:
      • Assuming get_dag returns None if DAG exists
      • Confusing tasks with task instances
      • Expecting error if DAG is present
      4. You wrote this test code but it raises an AttributeError: 'NoneType' object has no attribute 'tasks'. What is the likely cause?
      dagbag = DagBag(dag_folder='dags')
      dag = dagbag.get_dag('missing_dag')
      print(len(dag.tasks))
      medium
      A. The DAG 'missing_dag' does not exist in the folder
      B. DagBag cannot load DAGs from 'dags' folder
      C. len() cannot be used on dag.tasks
      D. get_dag() returns a list, not a DAG object

      Solution

      1. Step 1: Analyze get_dag return value

        get_dag returns None if the DAG name is not found in the loaded DAGs.
      2. Step 2: Understand AttributeError cause

        Trying to access dag.tasks when dag is None causes AttributeError.
      3. Final Answer:

        The DAG 'missing_dag' does not exist in the folder -> Option A
      4. Quick Check:

        get_dag returns None if DAG missing [OK]
      Hint: Check if get_dag returns None before accessing tasks [OK]
      Common Mistakes:
      • Assuming get_dag always returns a DAG
      • Thinking len() is invalid on tasks list
      • Believing DagBag can't load DAGs from folder
      5. You want to write a unit test to check that your DAG named 'data_pipeline' has exactly 5 tasks and no import errors. Which code snippet correctly performs this test?
      hard
      A. dagbag = DagBag(dag_folder='dags') assert dagbag.import_errors == {} dag = dagbag.get_dag('data_pipeline') assert len(dag.tasks) == 0
      B. dagbag = DagBag('dags') assert dagbag.import_errors == None dag = dagbag.get_dag('data_pipeline') assert len(dag.tasks) == 5
      C. dagbag = DagBag(dag_folder='dags') assert dagbag.import_errors != {} dag = dagbag.get_dag('data_pipeline') assert len(dag.tasks) == 5
      D. dagbag = DagBag(dag_folder='dags') assert dagbag.import_errors == {} dag = dagbag.get_dag('data_pipeline') assert len(dag.tasks) == 5

      Solution

      1. Step 1: Check import errors correctly

        dagbag.import_errors is a dict; empty dict {} means no import errors.
      2. Step 2: Verify task count assertion

        len(dag.tasks) == 5 checks that the DAG has exactly 5 tasks.
      3. Final Answer:

        dagbag = DagBag(dag_folder='dags') assert dagbag.import_errors == {} dag = dagbag.get_dag('data_pipeline') assert len(dag.tasks) == 5 -> Option D
      4. Quick Check:

        import_errors == {} and task count 5 [OK]
      Hint: Assert import_errors == {} and task count matches [OK]
      Common Mistakes:
      • Checking import_errors against None instead of {}
      • Asserting wrong task count
      • Confusing import_errors presence logic
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard