gpt4 book ai didi

python - Pytest - pytest_generate_tests 中的 tmpdir_factory

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:32 24 4
gpt4 key购买 nike

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

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

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

@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 fixture 不适用于 pytest_generate_tests 方法。我的问题是如何通过生成所有测试来实现我的目标?

最佳答案

首先也是最重要的,pytest_generate_tests 是 pytest 中的一个钩子(Hook),而不是 fixture 函数的名称。摆脱它之前的 @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 而不是考虑使用钩子(Hook) pytest_sessionstart 在那里创建它并在以后使用它。

关于python - Pytest - pytest_generate_tests 中的 tmpdir_factory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44638575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com