更新: 使用tmp_path
代替tmpdir
。 tmp_path
是一个pathlib.Path/pathlib2.Path。
tmpdir
是一个py.path(实际上是LocalPath),它提供了与pathlib.Path非常相似的语法。参见pytest问题反馈。
开发人员不再推荐使用py.path。
语法类似,例如:
def test_something_else(tmp_path):
#create a file "myfile" in "mydir" in temp directory
f1 = tmp_path / "mydir/myfile"
f1.parent.mkdir() #create a directory "mydir" in temp folder (which is the parent directory of "myfile"
f1.touch() #create a file "myfile" in "mydir"
#write to file as normal
f1.write_text("text to myfile")
assert f1.read_text() == "text to myfile"
翻译:我仔细研究了它,也发现了这种行为的特殊之处,并总结了下面我所学到的内容,供那些不太直观的人参考。
tmpdir
是pytest中预定义的fixture,类似于此处定义的setup
:
import pytest
class TestSetup:
def __init__(self):
self.x = 4
@pytest.fixture()
def setup():
return TestSetup()
def test_something(setup)
assert setup.x == 4
因此,tmpdir
是在pytest
中定义的固定名称,如果您将其作为参数名称传递,则会传递给您的测试函数。
示例用法:
def test_something_else(tmpdir):
#create a file handle for "myfile" in "mydir" in temp folder
f1 = tmpdir.mkdir("mydir").join("myfile")
#create a file handle for "myfile" in temp folder
f2 = tmpdir.join("myfile")
#write to file as normal (this is what actually creates the file)
f1.write("text to myfile")
assert f1.read() == "text to myfile"
当你使用pytest运行它时,它可以正常工作,例如在终端中运行py.test test_foo.py
。以这种方式生成的文件具有读写访问权限,并且稍后可以在系统的临时文件夹中查看(对我来说,这是/tmp/pytest-of-myfolder/pytest-1/test_create_file0
)。
def test_foo(tmpdir)
这个函数对你是否有效? - vaultah