【问题标题】:PyTest: Auto delete temporary directory created with tmpdir_factoryPyTest:自动删除使用 tmpdir_factory 创建的临时目录
【发布时间】:2019-01-06 16:22:22
【问题描述】:

我正在尝试使用 PyTest 的 tmpdir_factory 类似于 tutorial 为模块内的所有测试创建一个具有特定名称(例如“数据”)的临时目录:

@pytest.fixture(scope='module')
def project_file(self, tmpdir_factory):
    return tmpdir_factory.mktemp("data")

我在模块内的一些测试中成功使用了临时目录。但是,运行测试后该目录仍然存在,当我再次运行它们时,我会失败,因为我无法创建一个名为“data”的新临时目录。

如何在 pytest 测试完成后自动删除临时目录“data”? tmpdir 参数创建的临时目录已被删除,但没有名称,只有函数范围。

【问题讨论】:

    标签: python testing pytest temporary-files


    【解决方案1】:

    您可以在夹具完成后进行清理,如下所示:

    @pytest.fixture(scope='module')
    def project_file(self, tmpdir_factory):
        my_tmpdir = tmpdir_factory.mktemp("data")
        yield my_tmpdir 
        shutil.rmtree(str(my_tmpdir))
    

    【讨论】:

    • 我改成yield并添加了shutil.rmtree(),但是测试完成后“临时”目录仍然存在。 rmtree 呼叫要么永远无法到达,要么不起作用。与教程中一样,我使用 project_file 作为我的一个测试函数的参数。
    • 使用shutil.rmtree('data') 而不是shutil.rmtree(my_tmpdir) 解决了这个问题。调整好答案后,我会接受的。
    • 其实str(my_tmpdir)也行不通。只有 "data" 作为参数。
    • @CGFoX,如果您只是将字符串 "data" 传递给 rmtree,那么您的代码还有其他问题。您如何使用project_file 夹具?
    • 你是对的。我什至没有正确使用 tmpdir(它是在我的用户临时目录的某个地方创建的)。相反,我只是创建了一个独立于 tempdir_factory 的“数据”目录......
    猜你喜欢
    • 2010-10-10
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    相关资源
    最近更新 更多