2016-11-12 4 views
0

Согласно pytest documentation, можно переопределить настройки временного каталога по умолчанию следующим образом:Как динамически изменять TMPDIR Base Каталог pytest в

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»). Возможно ли это?

Я близок только качению мой собственный tmpdir на основе code for the original, но предпочел бы не делать этого - я хочу построить на вершине существующей функциональности, где я могу, не дублировать его.


Как и в сторону, мой конкретный случай использования является то, что я пишу модуль Python, который будет действовать на различных файловых систем (NFS4 и т.д.), и было бы неплохо иметь возможность, чтобы получить функциональность из tmpdir, чтобы иметь возможность создавать следующие приборы:

def test_nfs3_stuff(nfs3_tmpdir): 
    ... test NFS3 functionality 

def test_nfs4_stuff(nfs4_tmpdir): 
    ... test NFS4 functionality 

ответ

0

Там не кажется, хороший решение проблемы, поставленной в вопросе, так что я осевшие на создание двух вызовов py.test:

  • Передача в другом --basetemp для каждого.
  • Маркировка (с использованием @pytest.mark.my_mark), которая требует специальной обработки с использованием нестандартного basetemp.
  • Передача -k my_mark или -k-my_mark в каждый звонок.
0

В источниках 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 
Смежные вопросы