Моя tests
директория выглядит так:
tests/
conftest.py
some_of_tests/
conftest.py
test_parts.py
test_these_parts.py
some_other_tests/
conftest.py
test_these_other_parts.py
У меня есть фиксатор в /tests/confest.py
, который создает тестовый файл, создает экземпляр подключения к базе данных, а затем выполняет некоторую очистку базы данных:
@pytest.fixture(scope='session', autouse=True)
def setup_db():
try:
generate_test_files()
db = connect_to_db()
yield db
finally:
# cleanup
print("Cleaning up session scoped fixture")
В tests/some_tests/conftest.py
у меня есть другой прибор, который создает некоторые файлы, создает таблицу базы данных, а затем удаляет эти файлы:
@pytest.fixture(scope='package')
def local_setup():
try:
generate_test_files()
# do stuff with db
yield db
finally:
delete_test_files()
print("Cleaning up package scoped fixture")
Мои тесты настроены таким образом, что я хочу, чтобы тестовые файлы, сгенерированные some_of_tests
, были очищены перед запуском тестов в some_other_tests
. Я ожидал продолжения работы приборов в some_of_tests
и вызова delete_test_files()
перед запуском тестов в some_other_tests
, но когда я запускаю pytest --capture=no tests
, я вижу:
Cleaning up session scoped fixture
Cleaning up package scoped fixture
после того, как все тесты были выполнены , и они не в том порядке, в котором я ожидал. Что я неправильно понимаю и как лучше всего очистить тесты в рамках пакета перед запуском следующего пакета тестов?
Также я понимаю, что pytest
работает в алфавитном порядке. Я использую это для запуска тестов в том порядке, в котором я их хочу. Таким образом, pytest будет запускать их как some_of_tests/test_parts.py -> some_of_tests/test_these_parts.py -> some_other_tests/test_these_other_parts.py