Jump to content

pytest

Это хорошая статья. Нажмите здесь для получения дополнительной информации.

Пайтест
Оригинальный автор(ы) Крекель и др.
Стабильная версия
8.3.2 [1]  Отредактируйте это в Викиданных / 25 июля 2024 г .; 13 дней назад ( 25 июля 2024 г. )
Репозиторий
Написано в Питон
Платформа macOS , Windows , POSIX
Тип Фреймворк для тестирования программного обеспечения
Лицензия МОЯ лицензия
Веб-сайт pytest .org  Edit this on Wikidata

Pytest — это среда тестирования Python , созданная на основе проекта PyPy . Его можно использовать для написания различных типов тестов программного обеспечения, включая модульные тесты , интеграционные тесты , сквозные тесты и функциональные тесты . Его функции включают параметризованное тестирование, фикстуры и утверждений перезапись .

Фикстуры Pytest предоставляют контексты для тестов, передавая имена параметров в тестовых примерах; его параметризация исключает дублирование кода для тестирования нескольких наборов ввода и вывода; а его переписанные операторы утверждения предоставляют подробный вывод о причинах сбоев.

Pytest был разработан как часть усилий сторонних пакетов по устранению недостатков встроенного в Python модуля unittest. Он возник как часть PyPy, альтернативной реализации Python стандартному CPython . С момента своего создания в начале 2003 года PyPy уделял большое внимание тестированию . В PyPy были модульные тесты для вновь написанного кода, регрессионные тесты на наличие ошибок и интеграционные тесты с использованием набора тестов CPython. [2]

В середине 2004 года появилась среда тестирования под названием utest, и участники PyPy начали конвертировать существующие тестовые примеры в utest. Тем временем на выставке EuroPython 2004 была изобретена дополнительная стандартная библиотека для тестирования под названием std. В этом пакете изложены принципы, такие как переписывание утверждений, того, что позже станет pytest. В конце 2004 года проект std был переименован в py, std.utest стал py.test, а библиотека py была отделена от PyPy. В ноябре 2010 года pytest 2.0.0 был выпущен как отдельный от py пакет. До августа 2016 года он по-прежнему назывался py.test, но после выпуска pytest 3.0.0 рекомендуемой в командную строку точкой входа стал pytest. [3]

Разработчик платформы безопасности Snyk классифицировал Pytest как один из ключевых проектов экосистемы Python из-за его популярности. Некоторые известные проекты, которые перешли на pytest с unittest и носа (еще одного пакета тестирования), включают проекты Mozilla и Dropbox . [4] [5] [6] [7]

Параметризованное тестирование

[ редактировать ]

При тестировании программного обеспечения распространена практика отправки значений через тестовые функции и проверки правильности вывода. Во многих случаях для тщательного тестирования функциональности необходимо протестировать несколько наборов ввода/вывода, а написание таких случаев по отдельности может привести к дублированию кода , поскольку большинство действий останутся прежними, отличаясь только значениями ввода/вывода. Функция параметризованного тестирования Pytest исключает такой дублирующийся код, объединяя различные итерации в один тестовый пример, затем запуская эти итерации и отображая результат каждого теста отдельно. [8]

Параметризованные тесты в pytest отмечены значком @pytest.mark.parametrize(argnames, argvalues) декоратор , где первый параметр , argnames, представляет собой строку имен, разделенных запятыми, и argvalues это список значений для передачи в argnames. Когда в списке несколько имен argnames, argvalues будет списком кортежей, где значения в каждом кортеже соответствуют именам в argnames по индексу. Имена в argnames затем передаются в тестовую функцию, отмеченную декоратором как параметры. Когда pytest запускает такие декорированные тесты, каждая пара argnames и argvalues будет представлять собой отдельный запуск с собственным тестовым результатом и уникальным идентификатором. Затем идентификатор можно использовать для запуска отдельных пар данных. [8] : 52–58  [9]

Утверждать переписывание

[ редактировать ]

При написании тестов программного обеспечения оператор утверждения является основным средством сообщения о неудачном тесте, когда ожидаемые значения сравниваются с фактическими значениями. [8] : 32–34  В то время как встроенное ключевое слово Assertion в Python в случае сбоя вызывает только AssertionError без каких-либо подробностей, pytest переписывает ключевое слово Assert Python и предоставляет подробный вывод о причинах сбоев, например, какие выражения в операторе Assert оцениваются. Сравнение можно провести с помощью операторов утверждения unittest (встроенного модуля Python для тестирования): [8] : 32 

pytest юниттест
assert x assertTrue(x)
assert x == y assertEqual(x, y)
assert x <= y assertLessEqual(x, y)

unittest придерживается более подробного синтаксиса, поскольку он вдохновлен Java языка программирования JUnit , как и большинство библиотек модульного тестирования; pytest достигает того же результата, перехватывая встроенные вызовы утверждений Python, что делает подход более кратким. [8] : 32  [6]

Приборы Pytest

[ редактировать ]

Тесты Pytest подтверждают, что компьютерный код работает должным образом. [10] с использованием тестов, которые структурированы в последовательность «организовать, действовать и утверждать», известную как AAA. [11] Его фикстуры обеспечивают контекст для тестов. Их можно использовать для перевода системы в известное состояние и передачи данных в тестовые функции. Фиксаторы практически составляют этап организации в анатомии теста (AAA, сокращение от «организовать» , «действовать» , «утверждать» ). [11] [10] unittest и носа (еще одной сторонней среды тестирования Python) Фикстуры Pytest могут запускаться перед тестовыми примерами в качестве настройки или после тестовых сценариев для очистки, но они отличаются от настроек и демонтажа . Функции, объявленные как фикстуры pytest, помечаются значком @pytest.fixture декоратор , имена которого затем можно передавать в тестовые функции в качестве параметров. [12] Когда pytest находит имена фикстур в параметрах тестовых функций, он сначала ищет такие фикстуры в том же модуле, а если не находит, ищет такие фикстуры в файле conftest.py. [8] : 61 

Например:

import pytest

@pytest.fixture
def dataset():
    """Return some data to test functions"""
    return {'data1': 1, 'data2': 2}

def test_dataset(dataset):
    """test and confirm fixture value"""
    assert dataset == {'data1': 1, 'data2': 2}

В приведенном выше примере приспособление pytest dataset возвращает словарь, который затем передается в тестовую функцию test_dataset для утверждения. Помимо обнаружения фикстур в том же файле, что и тестовые примеры, фикстуры pytest также можно поместить в файл conftest.py в каталоге тестов. Может существовать несколько файлов conftest.py, каждый из которых расположен в каталоге тестов, чтобы можно было обнаружить приспособления для каждого подмножества тестов. [8] : 63 

Область применения приспособлений

[ редактировать ]

В pytest области действия приспособлений позволяют пользователю определять, когда следует вызывать приспособление. Существует четыре области видимости: область функции , класса область , область модуля и область сеанса. Фикстуры в области функций используются по умолчанию для всех фикстур pytest, которые вызываются каждый раз, когда запускается функция, имеющая фикстуру в качестве параметра. Целью указания более широкой области действия фикстуры является устранение повторных вызовов фикстуры, которые могут замедлить выполнение теста. Фикстуры в области класса вызываются один раз для каждого тестового класса, независимо от того, сколько раз они вызываются, и та же логика применима ко всем остальным областям. При изменении области видимости фикстуры достаточно добавить параметр области в декораторы фикстуры, например: @pytest.fixture(scope="class"). [8] : 72  [13]

Тестовая фильтрация

[ редактировать ]

Еще одной особенностью pytest является его способность фильтровать тесты, при которых для запуска выбираются только нужные тесты или они ведут себя определенным образом, как того желает разработчик. «k» С опцией (например, pytest -k some_name), pytest будет запускать только тесты, имена которых включают some_name. Обратное верно, где можно бежать pytest -k "not some_name", и pytest запустит все тесты, имена которых не включают some_name. [14]

Маркеры Pytest могут не только изменять поведение теста, но и фильтровать тесты. Маркеры Pytest — это декораторы Python, начиная с @pytest.mark.<markername> синтаксис, размещенный поверх тестовых функций. С разными маркерами с произвольными именами запуск pytest -m <markername> в командной строке будут запускаться только те тесты, которые отмечены такими маркерами. [8] : 13  Все доступные маркеры можно просмотреть с помощью pytest --markers вместе с их описаниями; пользовательские маркеры также могут определяться пользователями и регистрироваться в pytest.ini, и в этом случае pytest --markers также перечислит эти пользовательские маркеры вместе со встроенными маркерами. [8] : 147 

См. также

[ редактировать ]
  1. ^ «Выпуск 8.3.2» . 25 июля 2024 г. Проверено 26 июля 2024 г.
  2. ^ Больц-Терайк, Карл Фридрих (9 сентября 2018 г.). «Блог о статусе PyPy» . ПиПи . Архивировано из оригинала 6 июля 2022 года . Проверено 12 мая 2022 г.
  3. ^ «История» . pytest . Архивировано из оригинала 16 мая 2022 года . Проверено 13 апреля 2022 г.
  4. ^ «Примеры проектов» . Пайтест . Архивировано из оригинала 1 февраля 2022 года . Проверено 1 февраля 2022 г.
  5. ^ Курапати, Нипунн. «Инструменты Pytest с открытым исходным кодом» . Дропбокс . Архивировано из оригинала 11 июня 2024 года . Проверено 1 февраля 2022 г.
  6. ^ Jump up to: а б Оливейра, Бруно (август 2018 г.). Краткое руководство по запуску pytest . Пакт Паблишинг . ISBN  978-1-78934-756-2 . Архивировано из оригинала 1 февраля 2022 года . Проверено 1 февраля 2022 г.
  7. ^ "pytest" . Сник . Архивировано из оригинала 27 июня 2022 года . Проверено 12 мая 2022 г.
  8. ^ Jump up to: а б с д и ж г час я дж Оккен, Брайан (сентябрь 2017 г.). Тестирование Python с помощью Pytest (1-е изд.). Прагматичная книжная полка. ISBN  9781680502404 . Архивировано из оригинала 20 января 2022 года . Проверено 22 января 2022 г.
  9. ^ «Параметризация приборов и функции тестирования» . pytest.org . Архивировано из оригинала 4 июня 2022 года . Проверено 24 мая 2022 г.
  10. ^ Jump up to: а б Виафоре, Патрик (12 июля 2021 г.). Надежный питон . O'Reilly Media, Inc. ISBN  978-1-0981-0061-2 . Архивировано из оригинала 3 июля 2022 года . Проверено 3 июля 2022 г. Тесты проверяют, что то, что вы создаете, работает так, как вы ожидаете.
  11. ^ Jump up to: а б Хориков, Владимир (январь 2020 г.). Принципы, практики и шаблоны модульного тестирования . Опубликовано издательством Manning Publications. ISBN  9781617296277 . Архивировано из оригинала 4 июня 2022 года . Проверено 4 июня 2022 г.
  12. ^ «О светильниках» . Пайтест . Архивировано из оригинала 7 февраля 2022 года . Проверено 7 февраля 2022 г.
  13. ^ Ашвин, Паджанкар (27 февраля 2017 г.). Автоматизация модульного тестирования Python: практические методы для разработчиков и тестировщиков Python . Апресс. ISBN  9781484226766 . Архивировано из оригинала 7 марта 2022 года . Проверено 7 марта 2022 г.
  14. ^ Молина, Алессандро (февраль 2021 г.). Создание программного обеспечения, управляемого тестированием, с помощью Python . Издательство: Packt Publishing. ISBN  9781838642655 . Архивировано из оригинала 8 марта 2022 года . Проверено 8 марта 2022 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 58c5ce17fd60537d857094385efb8e98__1718069340
URL1:https://arc.ask3.ru/arc/aa/58/98/58c5ce17fd60537d857094385efb8e98.html
Заголовок, (Title) документа по адресу, URL1:
pytest - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)