我正在使用pytest来测试我敏捷的工作流程。我有一个特定的工作流程ingest_l0_files
,它使用Client
将任务映射到工作人员。在测试过程中,我需要人为设置目录路径,该目录路径在名为CURRENT_RUN_LOG_PATH
的环境变量中设置。重要的是,此设置在集成测试和实际运行中可以完美地工作。我在驱动程序脚本中设置了环境变量,并且我的所有工作人员都可以访问该环境变量(因为它们大概是从您的主进程生成的)。但是,在我的pytest中,(人工设置的)环境变量对工作人员不可用。为什么?也许我可以告诉我的utils_test.client
重新初始化其环境,然后将其传递给其工作人员?
from distributed.utils_test import client
def test_ingest_l0_files(client, clean_database_fixture, tmpdir):
"""Test the workflow function `ingest_l0_files`"""
os.putenv('CURRENT_RUN_LOG_PATH', f'{tmpdir}')
get_config('CURRENT_RUN_LOG_PATH')
client = client()
unique_obs = workflow.ingest_l0_files([L0_ALL_FILE, L0_LPT_FILE], client)
assert len(unique_obs) == 20
os.unsetenv('CURRENT_RUN_LOG_PATH')
答案 0 :(得分:0)
您正确的说,client
pytest固定装置不是特别可扩展的。
如果您对异步编程感到满意,那么我建议使用@gen_cluster
装饰器,该装饰器提供了更多选项:
@gen_cluster(
client=True,
Worker=Nanny,
worker_options={"env": {"FOO": "BAR"}},
)
async def test_foo(client, scheduler, worker_a, worker_b):
await ...
但这会要求您的代码是异步友好的,但实际情况可能如此。如果您调用非异步方法,则此测试将无济于事。
https://distributed.dask.org/en/latest/develop.html#writing-tests