Прелести Pytest: Pytest-BDD |
06.04.2020 00:00 | ||||||||||||||||||||||||||||||||||
Автор: Джош Грант (Josh Grant) Продолжая исследовать Pytest и его замечательные возможности, хочу рассказать о плагине pytest, который по сути представляет из себя полноценный инструмент тест-автоматизации. Это pytest-bdd. Pytest-bdd – это вариация более распространенных фреймворков вроде Cucumber или Behave, который сам по себе – по сути Python Cucumber. BDD – популярный подход, распространенный среди команд – как работающих с автоматизированным тестированием впервые, так и опытных, ищущих зрелую методологию для внедрения. Ключевая особенность BDD – это создание фича-файлов с применением специального неспециализированного синтаксиса, Gherkin. Это позволяет описывать фичи вначале в таком формате:
Затем это можно превратить в компьютерный код и выполнить. Эти фича-файлы могут создаваться любыми членами команды, включая совместное творчество. В результате новые фичи документируются через запуск тест-кода, и это упрощает тест-коммуникацию. Давайте посмотрим, как с этим справляется pytest-bdd. Начнем с фича-файла с использованием Gherkin. Не отходя от тематики онлайн-магазина, назовем фичу store_login.feature. Она будет описывать, как работают два специфических потока авторизации, валидный и невалидный. Она выглядит так:
Обратите внимание, что это описательные сценарии. Идея тут в том, что фичи могут создаваться не напрямую разработчиками тестов, а путем сотрудничества с продакт-оунерами, дизайнерами UX и другими заинтересованными лицами. Теперь давайте посмотрим на внедрение этих шагов. Тест-разработчик теперь может создать файл test_store_login.py, который может выглядеть так: import pytest Это демонстрирует, как, продолжая пользоваться известными конструкциями Pytest (фикстурами, приписыванием test_ к файлам для исполнения), мы можем воспользоваться BDD и шагами Gherkin. Тут можно провести дополнительную работу, например, использовать паттерн page object или совместить шаги, но я хочу сконцентрироваться на BDD-аспекте этого сценария. Для выполнения этого теста мы можем вызвать pytest test_store_login.py и увидеть результат. Pytest-bdd также сгенерирует ряд полезных отчетов в стиле Cucumber в дополнение к стандартной отчетности Pytest. Доступны также замещения и регулярные выражения в шагах Gherkin. Наконец-то BDD и Pytest вместе: Все это прекрасно, но некоторые команды захотят поэкспериментировать с BDD-инструментарием, не переходя на полноценный BDD-инструмент вроде Cucumber. Даже если команды хотят полностью перейти на BDD, то рано или поздно некоторые из них обнаружат, что тест-разработчики в итоге пишут и управляют всем кодом автоматизации напрямую, включая создание и управление фича-файлами. Это может быть обременительным, особенно потому, что тест-разработчикам не нужна дополнительная нагрузка в виде фича-файлов. И тут-то pytest-bdd предстает во всем блеске. Так как pytest-bdd использует pytest, то возможно:
Допустим, что мы хотим убрать инструментарий BDD и пользоваться функциональностью pytest. Мы можем переписать тест на валидную авторизацию, а невалидная будет продолжать использовать pytest-bdd. После некоторой копипасты файл test_store_login.py будет выглядеть как-то так: import pytest При использовании той же команды, что и ранее, pytest test_store_login.py, оба теста будут запущены, отчетность Pytest будет такой же, как прежде, и для невалидной авторизации будет доступна дополнительная отчетность pytest-bdd. Если все пойдет хорошо, тот же процесс можно применить к тесту на невалидную авторизацию. Заметьте, что нам не нужно манипулировать фича-файлом: его можно сохранить или убрать, и на выполнение тестов он не повлияет. Pytest-bdd – полезный плагин для старта работы с BDD и Python, и при этом он не ограничивает команду использованием только BDD-подходов к автоматизации. Это киллер-фича, которой нет у множества BDD-фреймворков, и это еще одна отличная причина использовать Pytest, неважно, с pytest-bdd или без него. |