Я пытаюсь использовать 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 с несколькими процессорами.