pytest tmp_path留下了目录,这似乎是经过设计的。从阅读文档看,https://docs.pytest.org/en/7.1.x/how-to/fixtures.html#teardown-cleanup-aka-fixture-finalization似乎建议使用产率并删除该文件,但例如,这个测试文件在mac os/x上运行。
import os
import pytest
@pytest.fixture
def config_ini(tmp_path):
filename = tmp_path / "config.ini"
fout = open(filename, "w")
fout.write("myfile")
fout.close()
yield filename
os.unlink(filename)
def test_fn(config_ini):
fin = open(config_ini, "r")
assert fin.read() == "myfile"确实删除了临时文件,但是它留下了很多目录,比如,在连续运行这7次之后,我看到了
/private/var/folders/ls/l1zf4tmn6njb4xht7sft96680000gp/T/pytest-of-davidsc
/private/var/folders/ls/l1zf4tmn6njb4xht7sft96680000gp/T/pytest-of-davidsc/pytest-5
/private/var/folders/ls/l1zf4tmn6njb4xht7sft96680000gp/T/pytest-of-davidsc/pytest-5/test_fncurrent
/private/var/folders/ls/l1zf4tmn6njb4xht7sft96680000gp/T/pytest-of-davidsc/pytest-5/test_fn0
/private/var/folders/ls/l1zf4tmn6njb4xht7sft96680000gp/T/pytest-of-davidsc/pytest-current
/private/var/folders/ls/l1zf4tmn6njb4xht7sft96680000gp/T/pytest-of-davidsc/pytest-6
/private/var/folders/ls/l1zf4tmn6njb4xht7sft96680000gp/T/pytest-of-davidsc/pytest-6/test_fncurrent
/private/var/folders/ls/l1zf4tmn6njb4xht7sft96680000gp/T/pytest-of-davidsc/pytest-6/test_fn0
/private/var/folders/ls/l1zf4tmn6njb4xht7sft96680000gp/T/pytest-of-davidsc/pytest-7
/private/var/folders/ls/l1zf4tmn6njb4xht7sft96680000gp/T/pytest-of-davidsc/pytest-7/test_fncurrent
/private/var/folders/ls/l1zf4tmn6njb4xht7sft96680000gp/T/pytest-of-davidsc/pytest-7/test_fn0与文档相匹配,pytest只保留最后3个测试。
然而,我习惯于认为单元测试应该在它自身之后完全清理,而这个测试并没有。我想我可以
yield filename
shutil.rmtree(filename.parent)但是现在,我觉得我在破坏pytest机制,我可能会搞砸(比如我也删除了软链接pytest-current吗?)或者让它晃来晃去,指着不应该的东西?)
让我对不清理感到紧张的是,当这些测试被分散运行时--或者两个独立的进程正在运行不相互交谈的测试,pytest会“弄清楚吗?”,把这一个计数器正确起来,而不是给我带来碰撞?我很想放弃这个最热的tmp_path设备,转而使用tempfile,但是我为自己接受这种“新”技术而感到骄傲:)
发布于 2022-09-30 22:02:48
我在pytest github上开始了一场讨论,对那些感兴趣的人来说,这可能是一个更好的地方-- https://github.com/pytest-dev/pytest/discussions/10325。
https://stackoverflow.com/questions/73888271
复制相似问题