Как вы получаете pytest для понимания модулей Python, как Python? - PullRequest
0 голосов
/ 12 ноября 2019

Я менял структуру каталогов и добавлял случайные init .py и все такое в течение примерно двух часов, и я не могу понять, как заставить Pytest запустить тест, которыйимпортирует файл на один уровень выше.

Сейчас моя структура каталогов:

├── conftest.py
├── junk
│   ├── __init__.py
│   └── ook.py
└── tests
    ├── test_ook.py

, а содержимое ook.py:

def ook():
    pass

и содержимое test_ook.py:

from ook import ook


def test_horse():
    pass

Результат выполнения pytest и python -m pytest:

ImportError while importing test module '/home/z9/repos/test/tests/test_ook.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests/test_ook.py:1: in <module>
    from ook import ook
E   ModuleNotFoundError: No module named 'ook'

Этот код скопирован из этого поста: Обеспечение того, чтобы py.test включал каталог приложения в sys.path

Другие люди говорят, что это работает для них - это работает для меня в python, например, когда я пишу скрипт для from ook import ook, который работаетхорошо, но в pytest он просто не может понять это.

Python 3.7, pytest 5.2.2

Хорошо, поэтому для обновления реальная проблема в том, что ook.py нужно импортировать что-то,Он работает только с абсолютным импортом -> поведение при запуске «python -m pytest» отличается от «python»

Ответы [ 2 ]

1 голос
/ 12 ноября 2019

Ваш код находится в junk / ook.py , поэтому импорт в tests / test_ook.py должен выглядеть следующим образом:

from junk.ook import ook

Там на самом деле нетчто-нибудь особенное происходит при запуске pytest в отношении импорта и работы Python. Чтобы использовать относительный импорт, ook и tests должны принадлежать одному и тому же пакету. Если вы переместили каталог tests / в junk / , где находится ook.py , то в junk / tests / test_ook.py вы можетеиспользовать:

from ..ook import ook
0 голосов
/ 15 ноября 2019

Для импорта модулей python из другого пути к каталогу при выполнении pytest вам необходимо изменить ini-файл pytest (pytest.ini) .

Добавить файл pytest.ini врасположение рядом с conftest.py в следующем формате: -

[pytest]
python_paths = . junk/

После этого вы можете импортировать его из любого местоположения

Пожалуйста, обратитесь: - запуск тестов внутри Pytestкласс с конструктором

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