Так что оказалось, что где я создаю zip-файл, важно.Как и в этом случае, я создаю zip-файл из тестовой папки и архивирую файлы в папках src.Хотя окончательный почтовый файл выглядит идеально невооруженным глазом, поток воздуха отклоняет его.Я попытался добавить '-j' к команде zip (чтобы спрятать имена каталогов), и мой тест начал работать.тот же сценарий, когда в моем проекте DAG есть полная структура папок.Файл dag на верхнем уровне, который ссылается на множество модулей Python в проекте.Я не мог заставить это работать вышеупомянутым уловкой, но придумал обходной путь.Я создал небольшой скрипт оболочки, который выполняет zip-часть, например так:
SCRIPT_PATH=${0%/*/*}
cd $SCRIPT_PATH
zip -r -q test/dag_under_test.zip DagRunner.py
zip -r -q test/dag_under_test.zip tasks dag common resources
Этот скрипт оболочки меняет currentdir на проект home и архивирует оттуда.Я вызываю эту оболочку из приспособления pytest, как это
@fixture
def setup():
os.system('rm {}'.format(DAG_UNDER_TEST))
os.system('sh {}'.format(PACKAGE_SCRIPT))
yield
print("-------- clean up -----------")
os.system('rm {}'.format(DAG_UNDER_TEST))
Это прекрасно работает с моим интеграционным тестом.
def test_conversionDAG(setup):
configuration.load_test_config()
dagbag = DagBag(include_examples=False)
noOfDags = len(dagbag.dags)
dagbag.process_file(DAG_UNDER_TEST)
assert len(dagbag.dags) == noOfDags + 1, 'DAG import failures. Errors: {}'.format(dagbag.import_errors)
assert dagbag.get_dag("name of the dag")