在保持每会话文件夹行为的同时指定--basetemp

时间:2014-10-10 15:06:53

标签: python-2.7 testing pytest

使用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()

有效的解决方法:

  • 我可以在从python启动py.test时自己创建文件夹 文件并将其设置为basetemp。
  • 实现我自己的夹具 拉tmpdir,并从那里计算出来。
  • 更改我的临时路径环境变量

但我正在寻找一种内置方式?我们可以保持自动文件夹行为并同时指定一个新的basetemp吗?

3 个答案:

答案 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中最好地使用。