【问题标题】:Pytest - tmpdir_factory in pytest_generate_testsPytest - pytest_generate_tests 中的 tmpdir_factory
【发布时间】:2017-06-19 19:36:58
【问题描述】:

所以我有两个主要的代码部分:

  1. 在目录中生成大量配置文件。
  2. 运行之前生成的单个配置文件。

我想运行一个测试,首先我执行 code1 并生成所有文件,然后为每个配置文件运行 code2 并验证结果是否良好。 到目前为止,我的尝试是:

@pytest.fixture(scope='session')
def pytest_generate_tests(metafunc, tmpdir_factory):
    path = os.path.join(tmpdir_factory, "configs")
    gc.main(path,
            gc.VARIANTS, gc.MODELS,
            default_curvature_avg=0.0,
            curvature_avg_variation=0.9,
            default_gradient_avg=0.0,
            gradient_avg_variation=0.9,
            default_inversion="approximate",
            vary_inversion=False,
            vary_projections=True)
    params = []
    for model in os.listdir(path):
        model_path = os.path.join(path, model)
        for dataset in os.listdir(model_path):
            dataset_path = os.path.join(model_path, dataset)
            for file_name in os.listdir(dataset_path):
                config_file = os.path.join(dataset_path, file_name)
                folder = os.path.join(dataset_path, file_name[:-5])
                tmpdir_factory.mktemp(folder)
                params.append(dict(config_file=config_file, output_folder=folder))
                metafunc.addcall(funcargs=dict(config_file=config_file, output_folder=folder))

def test_compile_and_error(config_file, output_folder):
    final_error = main(config_file, output_folder)
    assert final_error < 0.9

但是,tmpdir_factory 夹具不适用于 pytest_generate_tests 方法。我的问题是如何通过生成所有测试来实现我的目标?

【问题讨论】:

    标签: python pytest fixtures


    【解决方案1】:

    首先也是最重要的, pytest_generate_tests 是 pytest 中的一个钩子,而不是夹具函数的名称。去掉前面的@pytest.fixture,再看看its docs。 Hooks 应该写在conftest.py 文件或插件文件中,并根据pytest_ 前缀自动收集。

    现在你的问题: 只需手动使用临时目录:

    import tempfile
    import shutil
    
    dirpath = tempfile.mkdtemp()
    

    pytest_generate_tests 内。将dirpath保存在conftest的全局中, 并删除pytest_sessionfinish 使用

    # ... do stuff with dirpath
    shutil.rmtree(dirpath)
    

    来源:https://stackoverflow.com/a/3223615/3858507

    请记住,如果您有多个测试用例,每个测试用例都会调用pytest_generate_tests。因此,您最好将所有临时目录保存在某个列表中,最后将它们全部删除。相比之下,如果您只需要一个 tempdir 而不是考虑使用钩子 pytest_sesssionstart 在此处创建它并稍后使用它。

    【讨论】:

      猜你喜欢
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多