2016-03-17 3 views
2

Мой проект Python импортирует pytest 2.9.0 отлично, без каких-либо проблем.Создание временного каталога в PyTest

Я хочу создать новый пустой каталог, который будет длиться только в течение всего сеанса тестирования. Я вижу, что pytest предлагает временную поддержку каталога:

https://pytest.org/latest/tmpdir.html

You can use the tmpdir fixture which will provide a temporary directory unique to the test invocation, created in the base temporary directory.

tmpdir is a py.path.local object which offers os.path methods and more. Here is an example test usage:

Источник-код pytest показывает, что def tmpdir глобальная функция/модуль: https://pytest.org/latest/_modules/_pytest/tmpdir.html

Однако мой тестовый файл не удается:

import pytest 

# ... 

def test_foo(): 
    p = pytest.tmpdir() 

С ошибкой:

AttributeError: 'module' object has no attribute 'tmpdir'

Ведение from pytest import tmpdir терпит неудачу с:

ImportError: cannot import name tmpdir

+2

В документации также приведены некоторые примеры. Использует ли 'def test_foo (tmpdir):' работает для вас? – vaultah

+1

[документация] (http://pytest.org/latest/tmpdir.html) иллюстрирует, как ее использовать, и [это] (http://stackoverflow.com/a/20545394/1832539). Сообщение SO также имеет пример. Это работает для вас? – idjaw

ответ

6

Я посмотрел в него в тоже нашел поведение свойственно, и я описываю то, что я узнал ниже, для других, которые не находят это настолько интуитивно.

кажется tmpdir предопределенная арматура в pytest аналогичен тому, как setup определяются здесь:

import pytest 

class TestSetup: 
    def __init__(self): 
     self.x = 4 

@pytest.fixture() 
def setup(): 
    return TestSetup() 

def test_something(setup) 
    assert setup.x == 4 

Таким образом tmpdir фиксированное имя, определенными в pytest, который передается на вашу функцию тест, если у вас есть как имя аргумента.

Пример использования:

def test_something_else(tmpdir): 
    #create a file "myfile" in "mydir" in temp folder 
    f1 = tmpdir.mkdir("mydir").join("myfile") 

    #create a file "myfile" in temp folder 
    f2 = tmpdir.join("myfile") 

    #write to file as normal 
    f1.write("text to myfile") 

    assert f1.read() == "text to myfile" 

Это работает, когда вы запустите его с помощью pytest, например, работает py.test test_foo.py в терминале. Файл, созданный таким образом, имеет доступ на чтение и запись и может быть просмотрен позже в вашей временной папке системы (для меня это было /tmp/pytest-of-myfolder/pytest-1/test_create_file0)

3

Вы просто должны пройти TMPDIR в качестве параметра функции, как это py.test приспособление.

def test_foo(tmpdir): 
    # do things with tmpdir 
Смежные вопросы