Основан на pluggy. Основная единица pytest - pytest плагин. Написан достаточно интересно. Ключевое слово - “ключевое слово”. Основное взаимодействие в pytest происходит через хуки. Хук это некий этап к которому можно получить доступ к той или иной логики работы. Следуя из названия это некоторые крючки за который можно цепляться вставляя свои заплатки. Начинаются с pytest.
Фикстуры (Fixture) в pytest это некий аналог мока/сетап tear down в unittests. Это некие кусочки кода результаты которых могут быть пере использованы. Сами фикстуры реализованы как плагин.
Как уже говорилось в эта система плагинов полагается на Pluggy. В Pluggy програамма полагается на PluginManager который управляет сохранения спецификаций хуков регистрацией плагинов и вызовом их. Плагины могут регистрировать сами себя в PluginManager.
Когда хук стартуют они вызывают свои имплементации по умолчанию как LIFO очередь - самый поздний элемент вызывается раньше всего. Для изменения этого порядка вызова можно применять trylast or tryfirst свойства в их имплементациях(пример). По умолчанию возвращается результат от всех имплементаций с исключением случая с как firstresult свойством. В случае свойства firstresult программа возвращает результат первого не None результата.
Другое интересное свойство имплементации плагина это hookwrapper. С помощью этого свойства имплементации будут вести себя как обертки над другими хуками с помощью yield.
Вдохнули?
Хуки вызываются 3 способами:
Читать далее