【发布时间】:2020-09-30 12:40:12
【问题描述】:
我正在为气流 dag 编写测试,但遇到了模拟/修补 dag 的问题。
# dag.py
from airflow.models import Variable
ENVIRONMENT = Variable.get("environment")
# test_dag.py
import dag
class TestDAG(TestCase):
def test_something(self):
pass
因为我只是在函数或类之外设置变量,所以它在导入期间运行 Variable.get()。这将给我一个 SQLAlchemy 错误,因为它正在尝试连接到数据库并获取变量。
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: variable
[SQL: SELECT variable.val AS variable_val, variable.id AS variable_id, variable."key" AS variable_key, variable.is_encrypted AS variable_is_encrypted
FROM variable
WHERE variable."key" = ?
LIMIT ? OFFSET ?]
[parameters: ('environment', 1, 0)]
有没有办法在气流.models.Variable 导入之前对其进行修补/模拟?
【问题讨论】:
-
我最终在导入之前对其进行了修补,这不是很好,但我还没有找到其他方法。这会产生 pep8 和 linting 错误,因为导入不再分组在顶部。如果有人有建议,我会留下问题
-
能否在代码中显示一下?
标签: python unit-testing testing mocking airflow