Python 如何动态更改pytest';s tmpdir基目录
根据,可以覆盖默认的临时目录设置,如下所示:Python 如何动态更改pytest';s tmpdir基目录,python,pytest,temporary-files,Python,Pytest,Temporary Files,根据,可以覆盖默认的临时目录设置,如下所示: py.test --basetemp=/base_dir 当tmpdir夹具用于测试时 def test_new_base_dir(tmpdir): print str(tmpdir) assert False 。。。类似于以下内容的内容将被打印到屏幕上: /base_dir/test_new_base_dir_0 这可以按预期工作,对于某些用例可能非常有用 但是,我希望能够在每次测试(或者我应该说是“每个夹具”)的基础上更改此
py.test --basetemp=/base_dir
当tmpdir
夹具用于测试时
def test_new_base_dir(tmpdir):
print str(tmpdir)
assert False
。。。类似于以下内容的内容将被打印到屏幕上:
/base_dir/test_new_base_dir_0
这可以按预期工作,对于某些用例可能非常有用
但是,我希望能够在每次测试(或者我应该说是“每个夹具”)的基础上更改此设置。这可能吗?
我已经接近于基于的推出我自己的tmpdir
,但我不想这样做——我想在现有功能的基础上构建,而不是复制它
另一方面,我的特殊用例是,我正在编写一个Python模块,该模块将作用于不同类型的文件系统(NFS4等),如果能够提供
tmpdir
的功能,并能够创建以下装置,那将是一件好事:
def test_nfs3_stuff(nfs3_tmpdir):
... test NFS3 functionality
def test_nfs4_stuff(nfs4_tmpdir):
... test NFS4 functionality
对于问题中提出的问题,似乎没有很好的解决方案,因此我决定打两个电话到
py.test
:
- 为每个输入一个不同的
--basetemp
- 标记(使用
)哪些测试需要使用非标准basetemp进行特殊处理@pytest.mark.my_mark
- 将
或-k my_标记
传递到每个调用中-k-my_标记
TempdirFactory
的源文件中,.config.option.basetemp
用作存储basetemp
的属性。因此,您可以在使用前直接设置:
import pytest
import time
import os
def mktemp_db(tmpdir_factory, db):
basetemp = None
if 'PYTEST_TMPDIR' in os.environ:
basetemp = os.environ['PYTEST_TMPDIR']
if basetemp:
tmpdir_factory.config.option.basetemp = basetemp
if db == "db1.db":
tmpdb = tmpdir_factory.mktemp('data1_').join(db)
elif db == "db2.db":
tmpdb = tmpdir_factory.mktemp('data2_').join(db)
return tmpdb
@pytest.fixture(scope='session')
def empty_db(tmpdir_factory):
tmpdb = mktemp_db(tmpdir_factory, 'db1.db')
print("* " + str(tmpdb))
time.sleep(5)
return tmpdb
@pytest.fixture(scope='session')
def empty_db2(tmpdir_factory):
tmpdb = mktemp_db(tmpdir_factory, 'db2.db')
print("* " + str(tmpdb))
time.sleep(5)
return tmpdb
def test_empty_db(empty_db):
pass
def test_empty_db2(empty_db2):
pass
-
>set PYTEST_TMPDIR=./tmp
>python.exe -m pytest -q -s test_my_db.py
* c:\tests\tmp\data1_0\db1.db
.* c:\tests\tmp\data2_0\db2.db
.
2 passed in 10.03 seconds