Когда продолжаются генераторы приспособлений pytest и влияет ли объем на это? - PullRequest
0 голосов
/ 20 апреля 2019

Моя 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

1 Ответ

0 голосов
/ 27 мая 2019

Я столкнулся с той же проблемой. Но я пришел к выводу, что вам нужно добавить __init__.py в свои тесты, чтобы они могли быть распознаны как пакеты. В противном случае, в конце он запустит демонтаж для теста и будет вести себя как сессия.

Например:

system_test/
     - conftest.py
     - test_dir1/
          - __init__.py
          - conftest.py (here put scope as package)
          - test1.py
          - test2.py
     - test_dir2/
          - __init__.py
          - test1.py
          - test2.py
          - conftest.py (here put scope as package)

Работает как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...