К сожалению, в настоящее время нет возможности сделать это хорошо. В будущем py.test представит новую область видимости «любая» или что-то подобное, но это будущее.
Прямо сейчас вам придется сделать это вручную. Однако, как вы заметили, вы теряете довольно много приятных функций: символические ссылки в / tmp на последний тест, автоматическую очистку после нескольких запусков тестов, каталоги с разумными именами и т. Д. Если каталог не слишком дорогой, я обычно комбинирую фикстуру с ограниченным объемом функций и сеансом. следующим образом:
@pytest.fixture(scope='session')
def sessiondir(request):
dir = py.path.local(tempfile.mkdtemp())
request.addfinalizer(lambda: dir.remove(rec=1))
# Any extra setup here
return dir
@pytest.fixture
def dir(sessiondir, tmpdir):
sessiondir.copy(tmpdir)
return tmpdir
Это создает временный каталог, который очищается после выполнения теста, однако для каждого теста, который действительно в нем нуждается (путем запроса dir
), создается копия, которая сохраняется с семантикой tmpdir.
Если тесты действительно должны передавать состояние через этот каталог, то финализатор dir
должен будет скопировать все обратно в каталог сеанса. Однако это не очень хорошая идея, поскольку из-за этого тесты зависят от порядка выполнения, а также могут вызвать проблемы при использовании pytest-xdist.
person
flub
schedule
27.08.2014