web-dev-qa-db-ja.com

unittestで気流のダグをテストする方法は?

テスト環境で複数のタスクを使用してDAGをテストしようとしています。 dagに関連付けられた単一のタスクをテストすることはできましたが、dagでいくつかのタスクを作成し、最初のタスクを開始します。 DAGで1つのタスクをテストするために使用しています

task1.run()

実行されています。しかし、Dagの下流で次々と多くのタスクを実行する場合、同じことが機能しません。

from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta


default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2015, 6, 1),
'email': ['[email protected]'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
# 'queue': 'bash_queue',
# 'pool': 'backfill',
# 'priority_weight': 10,
# 'end_date': datetime(2016, 1, 1),
}

dag = DAG('tutorial', default_args=default_args)

# t1, t2 and t3 are examples of tasks created by instantiating operators
t1 = BashOperator(
task_id='print_date',
bash_command='date',
dag=dag)

t2 = BashOperator(
task_id='sleep',
bash_command='sleep 5',
retries=3,
dag=dag)

t2.set_upstream(t1)

t1.run() # It is executing just first task.

2番目のタスクを実行するには、DAGを設計しているので不要なt2.run()を使用して実行する必要があります。これを達成する方法は?

8
mad_

あなたの質問をまだ完全に理解しているとは思いませんが、回答を始める際に少し試してみます。

DAGまたはそのタスクのサブセットを手動で実行するだけの場合は、CLIから次のように実行できます。

  • $ airflow run ...-タスクインスタンスを実行する
  • $ airflow test ...-依存関係をチェックしたり、データベースに状態を記録したりせずにタスクインスタンスをテストします
  • $ airflow trigger_dag ...-DAGの特定のDAG実行をトリガーします

CLIドキュメント- https://airflow.Apache.org/cli.html

Airflow runコマンドは、あなたのユースケースに最も関連するものだと思います。

実行時、DAGでのタスクのスケジューリングと、要件が満たされるとダウンストリームの依存関係の実行は、すべてexecutorによって自動的に処理されます。コードのどこかでrun()を呼び出す必要はありません。

Runメソッド自体に関する限り、コードはまだそこにあります。

ご質問

  1. 「テスト環境で」DAGをテストするとは、正確にはどういう意味ですか? CIや単体テストのように?
  2. このコードはテスト用ですか、実際のDAGのコードですか?
  3. これはあなたの他の最近の質問に関連していますか ユニットテストでAirflow 1.9のテストDagを実行
8
Taylor Edmiston