气流单元测试
Airflow unit testing
我希望能够对我的气流运算符进行单元测试,而不必 运行 在测试之前初始化气流数据库。
有办法吗?
非常感谢您的帮助!
不是直接的答案,而是一种不同的方法。
我们遇到了同样的问题,并且仍在对此进行试验。现在我们决定将自定义气流运算符的功能分成两部分。运算符本身处理与数据库有关的任何事情并编排流程,在另一个模块中我们有运算符的逻辑——与数据库无关。
例如,假设您有一个从存储桶中获取 csv 文件的操作员执行转换,然后将该文件插入数据库。让我们称之为 CsvToDBOperator。为此,我们将有两个 files/classes.
- CsvToDBOperator
- CsvToDBUtils
第二个将保留所有负责转换的 methods/functions。第一个将负责从桶中获取文件,将其传递给第二个进行转换,然后从中获取结果,最后将其插入到数据库中。
像这样,您可以为 CsvToDBUtils class 编写单元测试,并且只在这些单元测试上创建单元测试。
Airflow 已经在无需初始化数据库的情况下试用大多数操作符。我们大量使用模拟:
拆分钩子和操作符测试很常见。因此,首先测试挂钩方法(示例 DataprocHook method test) then you test the operators using the hook by mocking it (corresponding Dataproc example)。
我希望能够对我的气流运算符进行单元测试,而不必 运行 在测试之前初始化气流数据库。 有办法吗?
非常感谢您的帮助!
不是直接的答案,而是一种不同的方法。
我们遇到了同样的问题,并且仍在对此进行试验。现在我们决定将自定义气流运算符的功能分成两部分。运算符本身处理与数据库有关的任何事情并编排流程,在另一个模块中我们有运算符的逻辑——与数据库无关。
例如,假设您有一个从存储桶中获取 csv 文件的操作员执行转换,然后将该文件插入数据库。让我们称之为 CsvToDBOperator。为此,我们将有两个 files/classes.
- CsvToDBOperator
- CsvToDBUtils
第二个将保留所有负责转换的 methods/functions。第一个将负责从桶中获取文件,将其传递给第二个进行转换,然后从中获取结果,最后将其插入到数据库中。
像这样,您可以为 CsvToDBUtils class 编写单元测试,并且只在这些单元测试上创建单元测试。
Airflow 已经在无需初始化数据库的情况下试用大多数操作符。我们大量使用模拟:
拆分钩子和操作符测试很常见。因此,首先测试挂钩方法(示例 DataprocHook method test) then you test the operators using the hook by mocking it (corresponding Dataproc example)。