conftest рішення
Найменш інвазивним рішенням є додавання порожнього файлу, названого conftest.pyв repo/каталозі:
$ touch repo/conftest.py
Це воно. Не потрібно писати спеціальний код для керування sys.pathабо не забудьте перетягнути PYTHONPATHабо розміщувати __init__.pyв грі там, де йому не належить.
Після цього каталог проектів:
repo
├── conftest.py
├── app.py
├── settings.py
├── models.py
└── tests
└── test_app.py
Пояснення
pytestзовнішній вигляд для conftestмодулів на тестовій колекції , щоб зібрати призначені для користувача гачки і кріплення, а також для того , щоб імпортувати призначені для користувача об'єкти з них, pytestдодає батьківський каталог conftest.pyдоsys.path (в цьому випадку repoкаталогу).
Інші структури проекту
Якщо у вас є інша структура проекту, розмістіть conftest.pyу кореневому пакеті dir (той, що містить пакунки, але не є самим пакетом, тому не містить __init__.py), наприклад:
repo
├── conftest.py
├── spam
│ ├── __init__.py
│ ├── bacon.py
│ └── egg.py
├── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
src макет
Хоча цей підхід можна використовувати з srcмакетом (місце conftest.pyв режимі src):
repo
├── src
│ ├── conftest.py
│ ├── spam
│ │ ├── __init__.py
│ │ ├── bacon.py
│ │ └── egg.py
│ └── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
потрібно враховувати , що додавання srcдо PYTHONPATHпом'якшують сенс і переваги srcкирилиці! Ви закінчите тестування коду із сховища, а не встановленого пакету. Якщо вам потрібно це зробити, можливо, вам зовсім не потрібен srcреж.
Куди піти звідси
Звичайно, conftestмодулі - це не лише деякі файли, які допомагають виявити вихідний код; саме там pytestвідбуваються всі покращення рамки та налаштування вашого тестового набору. pytestмає багато інформації про conftestмодулі, розкидані по їхніх документах ; Почніть з conftest.py: локальних плагінів для директорій
Крім того, SO має відмінне запитання щодо conftestмодулів: У py.test, для чого використовують файли conftest.py?