операторы тестирования блока воздушного потока, которые полагаются на параметры командной строки - PullRequest
0 голосов
/ 24 августа 2018

Воздушный поток позволяет передавать параметры в даг через командную строку или через экспериментальный API отдыха. Например:

 airflow trigger_dag dag_id --conf '{"parameter":"~/path" }

Пример ссылочного модульного теста для оператора выглядит следующим образом: https://bcb.github.io/airflow/testing-dags

class TestMyOperator(TestCase):

    def test_execute(self):
        dag = DAG(dag_id='foo', start_date=datetime.now())
        task = MyOperator(dag=dag, task_id='foo')
        ti = TaskInstance(task=task, execution_date=datetime.now())
        result = task.execute(ti.get_template_context())
        self.assertEqual(result, 'foo')

Как можно смоделировать параметры командной строки в модульном тесте, подобном приведенному выше?

1 Ответ

0 голосов
/ 29 августа 2018

Я думаю, что лучшее решение - сделать параметр шаблоном

Отредактируйте ваш MyOperator следующим образом:


class MyOperator(BaseOperator):
    template_fields = ('parameter')

    @apply_defaults
    def __init__(self,
                 parameter,
                 *args,
                 **kwargs):

        super(MyOperator, self).__init__(*args, **kwargs)
        self.parameter = parameter

А в вашем DAG:

my_operator = MyOperator(dag=dag, 
                 parameter="{{ dag_run.conf['parameter'] }}")

В вашем тесте просто установите параметр

К сожалению, я не проверял это в DAG, но согласно различным поискам в Google это должно работать. С другой стороны, это делает MyOperator более независимым и может использоваться повторно в других местах, где DAG не создается с помощью trigger_dag

Я не знаю, возможно ли установить конфигурации во время теста, так как вы изменили бы dag_run. Но вы можете просмотреть тест-код Airflows и найти что-нибудь: https://github.com/apache/incubator-airflow/tree/master/tests

...