气流单元测试

Airflow unit testing

我希望能够对我的气流运算符进行单元测试,而不必 运行 在测试之前初始化气流数据库。 有办法吗?

非常感谢您的帮助!

不是直接的答案,而是一种不同的方法。

我们遇到了同样的问题,并且仍在对此进行试验。现在我们决定将自定义气流运算符的功能分成两部分。运算符本身处理与数据库有关的任何事情并编排流程,在另一个模块中我们有运算符的逻辑——与数据库无关。

例如,假设您有一个从存储桶中获取 csv 文件的操作员执行转换,然后将该文件插入数据库。让我们称之为 CsvToDBOperator。为此,我们将有两个 files/classes.

  • CsvToDBOperator
  • CsvToDBUtils

第二个将保留所有负责转换的 methods/functions。第一个将负责从桶中获取文件,将其传递给第二个进行转换,然后从中获取结果,最后将其插入到数据库中。

像这样,您可以为 CsvToDBUtils class 编写单元测试,并且只在这些单元测试上创建单元测试。

A​​irflow 已经在无需初始化数据库的情况下试用大多数操作符。我们大量使用模拟:

拆分钩子和操作符测试很常见。因此,首先测试挂钩方法(示例 DataprocHook method test) then you test the operators using the hook by mocking it (corresponding Dataproc example)。