Около года назад я оказалась в тестировании. Опыта работы в IT до этого не имела от слова «совсем». Кроме многочисленных тем, которые нужно было изучить и освоить, меня беспокоила очень актуальная сейчас тема — автоматизация тестирования. «А что у тебя с автоматизацией?» — часто можно услышать вопрос от коллег, которые хотят оценить уровень компетенций в тестировании. И мне стало интересно, а что у меня с автоматизацией: готова ли я не только «протыкивать» сайт руками, но и изучить язык программирования и писать автотесты. Ведь опытные коллеги говорят — без автоматизации в тестировании перспективы не такие уж и перспективы.
Не буду здесь писать о том, что такое автоматизация и когда ее нужно вводить на проекте, опишу только первый опыт создания UI автотестов. Возможно, начинающие свой путь в профессии найдут здесь несколько полезных для себя идей.
Итак, вдохновившись значимостью автотестов и проконсультировавшись с куратором, я взялась за создание первых автоматизированных тестов. Ввиду неопытности мы решили начать изучение c Behave и Selenium WebDriver.
Behave — фреймворк для написания автотестов на естественном понятном каждому человеку языке с логикой на Python. С помощью Behave можно написать тест-кейсы на естественном языке. Использование Behave в работе может приводить к оверхеду, так как появляются отдельные файлы с тест-кейсами, но первые тесты с ним будут нагляднее. Изучать язык программирования хотелось Python, поэтому выбор пал на Behave, а не Cucumber.
Selenium — потому что просто распространенный инструмент для управления веб-браузерами.
Изучение стоит начать с документации:
- Behave
- Selenium. А также перевод неофициальной документации Selenium для Python.
- Отдельно нужно обратить внимание на локаторы для элементов. Это нужно для Selenium, чтобы находить элементы на странице.
- И, конечно, Python — самая трудозатратная часть.
Практиковаться можно начать со статьи для новичков на хабре. Она поможет определиться с тем, что нужно сделать в начале пути. Я создала все директории, описанные в статье, и скопировала код из примера. Код не запустился так легко, как хотелось бы (с этим я сталкивалась позже в принципе на каждом шаге создания тестов), но оттуда я взяла начало для тестов на Python и посмотрела, как делать импорты.
На этом этапе всё шло довольно неплохо, наступила пора создания первых тестов. Узнав, что хорошая практика в автотестах — выносить переменные и условия для тестирования в отдельные файлы, я сделала структуру проекта.
В структуре были обязательные файлы:
- Файл с расширением «.feature». В нем хранятся тест-кейсы, написанные на понятном для бизнеса и всех членов проекта языке (те самые на Behave).
- Директория Steps с файлами.py. В ней реализованы все шаги на Python.
И опциональные файлы:
- файл environment.py (здесь лежат настройки для окружения),
- файл BasePage.py (здесь лежат общие для всех страниц настройки),
- директория pageobjects.
А также несколько служебных файлов (_init_.py, _main_.py).
Структура проекта получилась такой:
Папки и файлы созданы, дальше можно писать тест-кейсы, которые планируется автоматизировать. Пришло время для Behave.
Что пишется в файле.features
Разберем пример.
Feature — краткое и емкое название набора тестов для функциональности.
Scenario — название тест-кейса.
Ключевые слова Given, When, And, Then и But.
Given — шаг предварительных условий. Его целью является привести систему в нужное состояние прежде, чем начать с ней работать (например, настроить состояние базы данных, положить какие-то товары в корзину).
When — шаг описывает ключевое действие, которое выполняет пользователь. Это те действия, которые должен сделать пользователь, чтобы вызвать (или не вызвать) изменение некоторого состояния.
Then — этот шаг описывает результат, к которому нужно прийти.
And, But — шаги, которые имитируют предшествующий им шаг. Например, вместо того, чтобы использовать шаг When для нескольких действий пользователя, можно после первого действия с When чередовать шаги And и But.
Технически Behave не различает виды шагов, тем не менее если вы решите использовать этот фреймворк, то рекомендуется использовать шаги в соответствии с их назначением, чтобы попасть в логику тестовых сценариев.
На этом этапе, так как Behave был установлен и импортирован в проект без больших проблем, я была вдохновлена уже проделанной работой, но дальше началось самое сложное — теперь реализацию шагов нужно было сделать, используя Selenium на Python.
Что пишется в других файлах
Директория Steps и другие опциональные файлы — это реализация шагов из файла.features на языке Python.
Steps — сами тесты.
Environment — настройки окружения, браузеры, в которых будут прогоняться тесты, и шаги, которые выполняются до или после сценария/фичи/всего тестирования.
Base Page — общие настройки для всех страниц (такие, как инициализация браузера) и общие функции, которые будут использоваться в других файлах.
Page Objects — переменные и действия, которые пользователь будет совершать с ними.
Разберем подробнее, что писать в файлах Page Objects и Steps. Уточню, что это только один из вариантов, как можно организовать Page Objects, возможно, вы в своих первых тестах найдете более удобный способ для себя.
Файл Page Objects
- Словарь локаторов в формате: «[название для элемента]»: (By.[тип локатора], '[атрибут веб-элемента]').
- Функции, где используются созданные переменные. В приведенном выше примере используются метод поиска элементов на странице find_element (ищет элемент на странице), send_keys (вводит текст в поле), click (нажимает на кнопку).
В файле Steps будут использоваться созданные в файле Page Objects функции.
Файл Steps

Пример из файла Feature

Пример из директории Steps
В начале каждого шага с помощью декоратора (смотрите скриншот) связываются шаги на Python с шагами в файле feature. В декораторе указывается вид шага и действие из файла feature (Given, When, Then). Ниже в функции после обращения к нужному классу из Page Object прописываются функция, которая выполнит нужные действия в этом шаге, или проверка теста (шаг Then). В итоге я сделала тесты для функциональности поиска — получились несложные кейсы, на которых можно отработать умение писать автотесты.
В итоге разобравшись с тем, что такое Behave, Selenium, Page Objects и пройдя путь не лишенный боли и долгого «гугления», у меня получилось создать тесты. Что из этого я вынесла:
- очень долго и болезненно узнавать всё самостоятельно, начиная с азов на уровне — что такое функция и переменная (если у вас таких знаний нет). Но, проделав этот путь, вы не пожалеете ни о чем, ведь опыт, полученный «потом и кровью», становится еще более ценным и значимым. И поверьте, раз я смогла, то и вы сможете, пишу это как человек, восемь лет занимавшийся историей в университете и в аспирантуре решивший, что не хочет всю оставшуюся жизнь продолжать изучать прошлое.
- круто, если у вас на пути познания автотестов будет куратор или старший товарищ, который сможет вас направить в нужное русло. Мне повезло: я всегда могла обратиться с вопросами к своему куратору.
- пройдя через боль создания первых тестов, не факт, что вы не познаете эту боль еще раз с другим инструментом, но точно станете чувствовать себя увереннее в мире тестирования.
Елена Кикахина, QA Engineer