Ответ 1
После некоторой помощи на IRP-канале #pylib выясняется, что это была ошибка, исправленная в py.test 2.3.4.
Итак, я просто потерял день, пытаясь выяснить, почему py.test
не выполняет мой аутсорс, настройки для настройки сеанса и разборки. В конце концов я наткнулся (подсказка на this SO comment!) Этот маленький лакомый кусочек в плагинов:
Обратите внимание, что файлы conftest.py из подкаталогов по умолчанию не загружаются при запуске инструмента.
В моем проекте я получил файлы py.test(conftest.py
и файлы тестов) в подкаталоге tests/
, который кажется довольно стандартной настройкой. Если я запускаю py.test
в каталоге тестов, все работает правильно. Если я запускаю py.test
в корневом каталоге проекта, тесты все еще выполняются, но процедуры setup/teardown никогда не выполняются.
Вопросы:
conftest.py
в корневой каталог мне кажется странным, потому что я чувствую, что все файлы, связанные с тестированием, должны оставаться в подкаталоге tests
.conftest.py
в подкаталогах, не загруженных по умолчанию? Я считаю, что это поведение любопытно, по меньшей мере, учитывая, что тесты в подкаталогах обнаруживаются по умолчанию, поэтому, похоже, очень мало дополнительных усилий при поиске файлов для почтовых ящиков тоже.conftest.py
в загрузке подкаталогов (т.е. отказаться от значения по умолчанию)? Я не мог найти это в документах. Я бы хотел избежать дополнительной консоли
аргументы, если это возможно, поэтому я могу поместить что-либо в файл конфигурации или
этажерка?Любое понимание и советы очень ценятся, я чувствую, что потерял/потратил впустую много времени, чтобы диагностировать это, когда я мог бы написать тесты для моего проекта.: - (
Минимальный пример:
# content of tests/conftest.py
# adapted from http://pytest.org/latest/example/special.html
import pytest
def tear_down():
print "\nTEARDOWN after all tests"
@pytest.fixture(scope="session", autouse=True)
def set_up(request):
print "\nSETUP before all tests"
request.addfinalizer(tear_down)
тестовый файл:
# content of tests/test_module.py
class TestClassA:
def test_1(self):
print "test A1 called"
def test_2(self):
print "test A2 called"
class TestClassB:
def test_1(self):
print "test B1 called"
Выход консоли:
pytest_experiment$ py.test -s
======================================================== test session starts =========================================================
platform linux2 -- Python 2.7.4 -- pytest-2.3.2
plugins: cov
collected 3 items
tests/test_module.py test A1 called
.test A2 called
.test B1 called
.
====================================================== 3 passed in 0.02 seconds ======================================================
pytest_experiment$ cd tests/
pytest_experiment/tests$ py.test -s
======================================================== test session starts =========================================================
platform linux2 -- Python 2.7.4 -- pytest-2.3.2
plugins: cov
collected 3 items
test_module.py
SETUP before all tests
test A1 called
.test A2 called
.test B1 called
.
TEARDOWN after all tests
====================================================== 3 passed in 0.02 seconds ======================================================
После некоторой помощи на IRP-канале #pylib выясняется, что это была ошибка, исправленная в py.test 2.3.4.