使用pytest,有没有办法在指定基础文件夹时保持自动文件夹的行为?
我想将pytest文件夹从%TEMP%移动到特定的根目录,但是当使用--basetemp参数时,pytest不像以前那样为每个会话创建一个文件夹。
没有--basetemp:
%TEMP%\pytest-90
\test1()
\test2()
\test3()
%TEMP%\pytest-91
\test1()
\test2()
\test3()
%TEMP%\pytest-92
\test1()
\test2()
\test3()
使用--basetemp = D:\ Tests
D:\Tests
\test1()
\test2()
\test3()
这就是我想要实现的目标:
D:\Tests\pytest-90
\test1()
\test2()
\test3()
D:\Tests\pytest-91
\test1()
\test2()
\test3()
D:\Tests\pytest-92
\test1()
\test2()
\test3()
有效的解决方法:
但我正在寻找一种内置方式?我们可以保持自动文件夹行为并同时指定一个新的basetemp吗?
答案 0 :(得分:1)
查看管理basetemp目录的代码,目前似乎不可能:
def getbasetemp(self):
""" return base temporary directory. """
try:
return self._basetemp
except AttributeError:
basetemp = self.config.option.basetemp
if basetemp:
basetemp = py.path.local(basetemp)
if basetemp.check():
basetemp.remove()
basetemp.mkdir()
else:
basetemp = py.path.local.make_numbered_dir(prefix='pytest-')
self._basetemp = t = basetemp.realpath()
self.trace("new basetemp", t)
return t
我建议在tracker创建一个问题,看看别人有什么要说的。
答案 1 :(得分:1)
更新:接受的答案来自 2014 年,此后函数 getbasetemp() 发生了变化:
def getbasetemp(self) -> Path:
"""Return base temporary directory."""
if self._basetemp is not None:
return self._basetemp
if self._given_basetemp is not None:
basetemp = self._given_basetemp
ensure_reset_dir(basetemp)
basetemp = basetemp.resolve()
else:
from_env = os.environ.get("PYTEST_DEBUG_TEMPROOT")
temproot = Path(from_env or tempfile.gettempdir()).resolve()
user = get_user() or "unknown"
# use a sub-directory in the temproot to speed-up
# make_numbered_dir() call
rootdir = temproot.joinpath(f"pytest-of-{user}")
rootdir.mkdir(exist_ok=True)
basetemp = make_numbered_dir_with_cleanup(
prefix="pytest-", root=rootdir, keep=3, lock_timeout=LOCK_TIMEOUT
)
assert basetemp is not None, basetemp
self._basetemp = t = basetemp
self._trace("new basetemp", t)
return t
根据该代码,您可以设置环境变量 PYTEST_DEBUG_TEMPROOT。然后,文件夹将被称为这样:
<块引用>PYTEST_DEBUG_TEMPROOT/pytest-of-USER/pytest-NUMBER/popen-gwX/....
诸如“popen-gwX”之类的目录仅在使用 pytest-xdist 的情况下存在
答案 2 :(得分:0)
我将TEMP = logs设置为pytest,并将旋转编号的dir模型保留在新文件夹下。这是py.path.local API的产品。另一方面,basetemp并非旨在满足您的要求,它主要是一个固定日志目录的好工具,也许可以在CICD中最好地使用。