Тестирование моих операторов, что мне нужно настроить в первую очередь? - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь проверить одного из моих операторов.Для этого я вдохновляю свой код из:

https://github.com/apache/airflow/blob/master/tests/operators/test_python_operator.py

Я скопировал вставленный код и попытался выполнить его.Я получаю исключение, сгенерированное методом create_session из airflow.

Вот полный стек.

../.venv/lib/python3.7/site-packages/sqlalchemy/engine/default.py:552: OperationalError

The above exception was the direct cause of the following exception:

cls = <class 'tests.include.operators.test_feature_flip_operator.TestShortCircuitOperator'>

    @classmethod
    def setUpClass(cls):
        super().setUpClass()

        with create_session() as session:
>           session.query(DagRun).delete()

__class__  = <class 'tests.include.operators.test_feature_flip_operator.TestShortCircuitOperator'>
cls        = <class 'tests.include.operators.test_feature_flip_operator.TestShortCircuitOperator'>
session    = <sqlalchemy.orm.session.Session object at 0x7f1d0c84b410>

tests/include/operators/test_feature_flip_operator.py:52: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../.venv/lib/python3.7/site-packages/sqlalchemy/orm/query.py:3700: in delete
    delete_op.exec_()
../.venv/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py:1694: in exec_
    self._do_exec()
../.venv/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py:1922: in _do_exec
    self._execute_stmt(delete_stmt)
../.venv/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py:1699: in _execute_stmt
    self.result = self.query._execute_crud(stmt, self.mapper)
../.venv/lib/python3.7/site-packages/sqlalchemy/orm/query.py:3367: in _execute_crud
    return conn.execute(stmt, self._params)
../.venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py:988: in execute
    return meth(self, multiparams, params)
../.venv/lib/python3.7/site-packages/sqlalchemy/sql/elements.py:287: in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
../.venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py:1107: in _execute_clauseelement
    distilled_params,
../.venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py:1253: in _execute_context
    e, statement, parameters, cursor, context
../.venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py:1473: in _handle_dbapi_exception
    util.raise_from_cause(sqlalchemy_exception, exc_info)
../.venv/lib/python3.7/site-packages/sqlalchemy/util/compat.py:398: in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
../.venv/lib/python3.7/site-packages/sqlalchemy/util/compat.py:152: in reraise
    raise value.with_traceback(tb)
../.venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py:1249: in _execute_context
    cursor, statement, parameters, context
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <sqlalchemy.dialects.sqlite.pysqlite.SQLiteDialect_pysqlite object at 0x7f1d0ce77190>
cursor = <sqlite3.Cursor object at 0x7f1d0c8fa960>
statement = 'DELETE FROM dag_run', parameters = ()
context = <sqlalchemy.dialects.sqlite.base.SQLiteExecutionContext object at 0x7f1d0c781890>

    def do_execute(self, cursor, statement, parameters, context=None):
>       cursor.execute(statement, parameters)
E       sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: dag_run
E       [SQL: DELETE FROM dag_run]
E       (Background on this error at: http://sqlalche.me/e/e3q8)

context    = <sqlalchemy.dialects.sqlite.base.SQLiteExecutionContext object at 0x7f1d0c781890>
cursor     = <sqlite3.Cursor object at 0x7f1d0c8fa960>
parameters = ()
self       = <sqlalchemy.dialects.sqlite.pysqlite.SQLiteDialect_pysqlite object at 0x7f1d0ce77190>
statement  = 'DELETE FROM dag_run'

Нужно ли устанавливать локальную базу данных или что-то в этом роде?Я изо всех сил пытаюсь найти любую документацию.

1 Ответ

0 голосов
/ 27 сентября 2019

код проверки модуля воздушного потока (например, https://github.com/apache/airflow/blob/master/tests/operators/test_python_operator.py) используется CI для покрытия кода воздушного потока.

Требуется некоторая настройка и определенные шаги для запуска испытаний модуля воздушного потока.Возьмите, например, https://github.com/apache/airflow/blob/master/.travis.yml, вам потребуется:

  1. запустить https://github.com/apache/airflow/blob/master/scripts/ci/ci_before_install.sh для установки необходимых модулей и убедиться, что установлены docker / docker-swarm.
  2. запустить https://github.com/apache/airflow/blob/master/scripts/ci/ci_run_airflow_testing.sh впостроить образ контейнера из текущей ветки с заданной конфигурацией сборки (использует sqlite в качестве базы данных по умолчанию, запускать с докером по умолчанию), затем запустить модульные тесты с помощью nosetests.

Вы можете настроить https://github.com/apache/airflow/blob/master/scripts/ci/in_container/run_ci_tests.sh#L49, чтобы запустить поднабор модульных тестов вместо всех (стоит 20 минут +).

...