Что такое conftest.py в Pytest?
Я пытаюсь понять, для чего предназначены файлы conftest.py
.
В моем (пока небольшом) наборе тестов у меня есть один файл conftest.py
в корне проекта. Я использую его для определения фикстур, которые я внедряю в свои тесты.
У меня есть два вопроса:
- Правильно ли я использую
conftest.py
? Есть ли у него другие применения? - Можно ли иметь более одного файла
conftest.py
? Когда это может понадобиться? Примеры будет очень полезно увидеть.
В более общем смысле, как вы бы определили цель и правильное использование файла(ов) conftest.py
в тестовом наборе pytest?
2 ответ(ов)
В широком смысле, conftest.py
— это локальный плагин для каждой директории. В этом файле вы определяете хуки и фикстуры, специфичные для данной директории. В моем случае есть корневая директория, содержащая специфичные для проекта директории с тестами. Некоторая общая логика размещена в корневом conftest.py
, а специфичная для проекта — в своих собственных conftest.py
. Я не вижу ничего плохого в хранении фикстур в conftest.py
, если они не используются широко (в таком случае я предпочитаю определять их прямо в файлах тестов).
Да, использование файла conftest.py
для определения фикстур, которые вы подключаете к своим тестам, является корректным. Фикстура обычно используется для подготовки данных для нескольких тестов.
Да, у фикстур есть и другие применения. Фикстура — это функция, которая выполняется pytest
перед, а иногда и после, выполнения самих тестовых функций. Код в фикстуре может выполнять любые задачи, которые вам нужны. Например, фикстура может использоваться для получения набора данных, с которым будут работать тесты, или для приведения системы в известное состояние перед выполнением теста.
Вы можете иметь более одного файла conftest.py
. Первое, что стоит отметить, это то, что фикстуры можно помещать в отдельные файлы тестов. Однако, чтобы делиться фиктурами между несколькими тестовыми файлами, вам нужно использовать файл conftest.py
, находящийся в центре для всех тестов. Фикстуры могут быть доступны любому тесту. Вы можете поместить их в отдельные тестовые файлы, если хотите, чтобы фикстура использовалась только тестами в этом файле.
Кроме того, да, вы можете иметь другие файлы conftest.py
в подкаталогах основной директории тестов. Если вы это сделаете, фикстуры, определенные в этих файлах conftest.py
, будут доступны для тестов в этом каталоге и подкаталогах.
Наконец, помещая фикстуры в файл conftest.py
в корне тестов, вы сделаете их доступными во всех тестовых файлах.
Как правильно проверить, что исключение возникает в pytest?
Как вывести стандартный вывод print() в консоль во время выполнения pytest?
Укажите, какие тесты pytest запускать из файла
Разделение файла conftest.py на несколько более мелких частей, похожих на conftest
Работают ли параметризованные тесты pytest с тестами на основе классов unittest?