Может показаться, что pytest просто не предназначен для повторных вызовов pytest.main()
из одного и того же процесса.В документации pytest упоминается:
Вызов pytest.main () приведет к импорту ваших тестов и всех импортируемых ими модулей.Из-за механизма кэширования системы импорта python последующие вызовы pytest.main () из того же процесса не будут отражать изменения в этих файлах между вызовами.По этой причине делать несколько вызовов pytest.main () из одного и того же процесса (например, для повторного запуска тестов) не рекомендуется.
Так что на самом деле реальная опасность выполнения несколькихpytest.main()
вызовов в рамках одного и того же процесса заключается в том, что вы можете получить ложноположительные или ложноотрицательные результаты теста, если вы отредактировали файлы кода между ними.
IDE Spyder имеет изящнуюЭта функция, кажется, сводит на нет эту проблему: Reloader модуля пользователя (UMR) .Если этот параметр включен, любые измененные пользовательские модули автоматически перезагружаются при повторном запуске файла сценария.
Поэтому я думаю, что пока вы работаете в Spyder (с включенной функцией UMR!), Вы можете безопасно перезапускать pytest.main()
без необходимости в новой консоли.Модуль pytest уже импортировал предупреждения, которые вы можете просто подавить, так как эти модули Pytest не изменились.Это может быть сделано с помощью -W
flag pytest .Пример:
if __name__ == '__main__':
import pytest
pytest.main(['./test_stuff.py', "--capture=sys", "-W", "ignore:Module already imported:pytest.PytestWarning"])