Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何动态更改pytest';s tmpdir基目录_Python_Pytest_Temporary Files - Fatal编程技术网

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
  • 标记(使用
    @pytest.mark.my_mark
    )哪些测试需要使用非标准basetemp进行特殊处理
  • -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