Python 将测试参数化到一个可测试的夹具结果上

Python 将测试参数化到一个可测试的夹具结果上,python,pytest,Python,Pytest,我有一个设置顶级目录的fixture,另一个fixture返回该目录中的文件列表,以及对通过的每个文件的参数化测试 问题是,如果parametrize()中没有参数,我就无法调用filenames(),即使如果没有参数,output\u dir`可以由会话夹具中的pytest填充 TypeError: filenames() takes exactly 1 argument (0 given) 代码: 在这个特定的例子中,有各种各样的方法来解决这个问题,但是我正在寻找解决问题的方法,而不是一种

我有一个设置顶级目录的fixture,另一个fixture返回该目录中的文件列表,以及对通过的每个文件的参数化测试

问题是,如果
parametrize()中没有参数,我就无法调用
filenames()
,即使如果没有参数,
output\u dir`可以由会话夹具中的pytest填充

TypeError: filenames() takes exactly 1 argument (0 given)
代码:


在这个特定的例子中,有各种各样的方法来解决这个问题,但是我正在寻找解决问题的方法,而不是一种解决问题的方法

现在还不清楚你想要实现什么。您似乎遇到了一些测试(此处未显示)在临时目录中创建文件的情况。然后通过
测试文件是否良好来验证这些文件。是吗?@ddavella是的,没错。我不确定在pytest中有没有处理这种情况的好方法。为什么不能在创建文件的测试中验证文件?@ddavella这些文件是在会话范围的设备中创建的,需要对它们运行许多测试。您能否以编程方式确定将创建的文件的名称?换句话说,是否有一个函数可以生成将要创建的所有文件的名称?
# conftest.py
@pytest.fixture(scope='session')
def output_dir(tmpdir_factory):
    dir_object = tmpdir_factory.mktemp('out')
    return str(dir_object) + '/'


# test_files.py
@pytest.fixture(scope='module')
def filenames(output_dir):
    return glob.glob(output_dir + '*.csv')


@pytest.mark.parametrize('filename', filenames())
def test_file_is_good(filename):
    with open(filename) as f:
        assert f.read()