根据pytest documentation,可以覆盖默认的临时目录设置,如下所示:
py.test --basetemp=/base_dir
然后在测试中使用tmpdir
夹具......
def test_new_base_dir(tmpdir):
print str(tmpdir)
assert False
......然后将以下内容打印到屏幕上:
/base_dir/test_new_base_dir_0
这可以按预期工作,对于某些用例可能非常有用。
但是,我希望能够在每次测试(或者我应该说" per-fixture")的基础上更改此设置。这样的事情可能吗?
我接近于仅根据code for the original滚动自己的tmpdir
,但我宁愿不这样做 - 我希望尽可能在现有功能的基础上构建,而不是复制它。
顺便说一下,我的特殊用例是我正在编写一个Python模块,它将作用于不同类型的文件系统(NFS4等),能够产生{{1的功能能够创建以下灯具:
tmpdir
答案 0 :(得分:0)
在问题中提出的问题似乎没有一个很好的解决方案,所以我决定拨打py.test
的两个电话:
--basetemp
。@pytest.mark.my_mark
)哪些测试需要使用非标准basetemp的特殊处理。-k my_mark
或-k-my_mark
传递给每个电话。答案 1 :(得分:0)
在xs
的来源中,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