Фикстуры в Pytest | OTUS
⚡Подписка от OTUS!
Собери свой пул курсов на выгодных условиях. Подробности в чате →
Написать в чат

Курсы

Программирование
Разработчик программных роботов (RPA) на базе UiPath и PIX
-6%
Разработчик C#
-8%
Алгоритмы и структуры данных
-8%
Backend-разработчик на PHP
-8%
JavaScript Developer. Professional
-9%
Team Lead
-5%
Golang Developer. Professional
-6%
Agile Project Manager
-5%
Flutter Mobile Developer
-10%
MS SQL Server Developer
-8%
C++ Developer. Professional Android Developer. Professional Framework Laravel Cloud Solution Architecture Highload Architect Reverse-Engineering. Professional Kotlin Backend Developer React.js Developer VOIP инженер Нереляционные базы данных Scala-разработчик Супер-практикум по использованию и настройке GIT IoT-разработчик JavaScript Developer. Basic Advanced Fullstack JavaScript developer Unity Game Developer. Professional Супер-интенсив Azure
Инфраструктура
Супер-интенсив "Версионирование и командная работа с помощью Git"
-30%
Administrator Linux. Professional
-5%
Супер-интенсив «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Разработчик программных роботов (RPA) на базе UiPath и PIX
-6%
Administrator Linux. Advanced
-8%
Infrastructure as a code in Ansible
-12%
Network engineer
-4%
MS SQL Server Developer
-8%
Cloud Solution Architecture Highload Architect Разработчик голосовых ассистентов и чат-ботов Мониторинг и логирование: Zabbix, Prometheus, ELK Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Архитектор сетей Супер-интенсив «IaC Ansible»
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Фикстуры в Pytest

Фикстуры – интересная фича в Pytest, которая нередко вызывает затруднения у новичков. Поначалу фикстуры сложно назвать интуитивно понятными, но как только вам удастся разобраться, как они работают, фикстуры станут неотъемлемой частью качественного Pytest-кода.

Но что же такое фикстура? По сути, речь идет о функции, которая несет логику, используемую в определенном контексте. Допустим, у нас стоит цель протестировать библиотеку генератора случайных чисел (назовем ее Rando). Для тестирования объект-экземпляра мы можем задействовать фикстуры:

Screenshot_1-1801-c1cb82.png

Данная фикстура вернет экземпляр Rando с именем rando, который можно передавать в функции. При этом каждая функция получит собственный независимый экземпляр rando, который можно будет задействовать в логическом теле функции. Синтаксически все может показаться относительно простым, но без своеобразной «магии» здесь не обошлось.

Во-первых, обратите внимание, что мы не применяем ООП в нашем коде, а две вышеуказанные функции не обязаны быть членами класса. При этом фикстура может без проблем использоваться данными функциями и не обязана сохранять состояние между тестами.

Для сравнения приведем пример объектно-ориентированного псевдокода:

Screenshot_2-1801-45bbae.png

Да, это более традиционный подход, и он тоже сработает с классами в «Пайтон». Но удивляет и радует другое: ООП не требуется для работы с Pytest. Мало того, оказывается, что для работы с Pytest ООП вообще лучше не использовать.

Почему? Чтобы это понять, рассмотрим второй интересный аспект применения фикстур: фикстуры могут использоваться другими фикстурами.

Допустим, в вышеприведенном примере генератора можно создать и передать RandoSeed в экземпляр Rando. И если мы желаем одновременно проверить и использовать его, то мы создадим следующие фикстуры:

Screenshot_3-1801-ffb6ed.png

Итак, в вышеуказанном коде применение фикстуры для RandoSeed полностью отделено от экземпляра генератора рандомных чисел. И оба можно применять в тестах и фикстурах независимо. То есть нет необходимости выделять эти тестовые функции в различные классы либо пробовать настраивать или уменьшать функциональность. Все работает так, как надо. Вы можете добавлять, убирать и менять тесты индивидуально и по мере необходимости, причем жонглировать структурами классов не нужно.

Все эти примеры – лишь начало применения фикстур в Python, однако они позволяют получить общее представление о том, как функционируют фикстуры и какие проблемы они решают. А также понять, что «дружить» с фикстурами в Pytest — дело полезное.

По материалам статьи «Pytest, The Awesome Parts: Fixtures»

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться