Добавьте __init__.py
и используйте относительный или абсолютный импорт в conftest.py
:
# relative
from .config import HOST_URL_DEFAULT, USER, PASSWORD
# absolute
from tests.config import HOST_URL_DEFAULT, USER, PASSWORD
В пакете (обозначенном __init__.py
) вам нужны однозначные пути импорта.Использование неквалифицированного импорта (from config import ...
) зависит от PYTHONPATH
или sys.modules
, включая корень вашего пакета - это обычно не надежно и его следует избегать, поскольку оно обходит инфраструктуру пакета.
Что у вас есть (config.py
используется другими модулями) - это пакет.Рассматривайте это как единое целое.
pytest
не не препятствует использованию тестового пакета с __init__.py
!Для этого есть реальные варианты использования - например, ваш.
Что pytest
не поощряет имеет исходный пакет и тестовый пакет в том же корневом каталоге источника.Однако это означает, что вам следует переместить исходный пакет , а не тестовый пакет!
mysource/ # root directory for both mypackage and mytests
+- mypackage/ # should be src/mypackage instead!
+- __init__.py
+- abcd.py
+- mytests
+- __init__.py
+- tests_abcd.py # ``from mypackage import abcd`` imports from source
Проблема в том, что запуск mytests
означает, что mypackage
также можно импортировать из источника,То есть ваши тесты работают на вашем исходном пакете , а не на вашем установленном пакете.Если в вашей процедуре установки есть какие-либо ошибки, тестирование ее не отловит. Подробнее см. В блоге, связанном в pytest
документах .