Использование pytest-xdist вызывает AttributeError: у модуля '__main__' нет атрибута '__file__' - PullRequest
1 голос
/ 27 июня 2019

Я пытаюсь использовать pytest-xdist для ускорения моих тестов, работая на нескольких процессорах. Однако, когда я переключаюсь на использование нескольких процессоров, тесты не запускаются, поскольку при сборе тестов возникает ошибка.

Более конкретно, ошибка

AttributeError: module '__main__' has no attribute '__file__'

Это потому, что тестируемые скрипты импортируют модуль логирования, который я написал. Модуль регистрации использует

__main__.__file__

для определения имени основного приложения с целью добавления его к имени файла выходного файла журнала.

Я не могу понять, что pytest делает по-другому в режиме с несколькими процессорами, чем в режиме с одним процессором.

Поэтому, когда я выполняю свои тесты как

python3 -m pytest

все работает просто отлично, но как только я переключаюсь на

python3 -m pytest -n 4

Я получаю эти ошибки:

____________________ ERROR collecting ***.py
***/logging/log_setup.py:21: in <module>
    app_name = os.path.basename(__main__.__file__)[:-3]
E   AttributeError: module '__main__' has no attribute '__file__'

Та же проблема возникает, когда я пытаюсь выполнить, используя метод подпроцесса Python:

python3 -m pytest -d --tx 3*popen//python=python3

EDIT: Я пока что решил проблему с помощью следующего кода в моем модуле регистрации:

if hasattr(__main__, '__file__'):
    app_name = os.path.basename(__main__.__file__)[:-3]
else:
    app_name = 'unknown_app_name'

Теперь у меня нормально работает pytest с несколькими процессорами.

...