Около года назад я оказалась в тестировании. Опыта работы в IT до этого не имела от слова «совсем». Кроме многочисленных тем, которые нужно было изучить и освоить, меня беспокоила очень актуальная сейчас тема — автоматизация тестирования. «А что у тебя с автоматизацией?» — часто можно услышать вопрос от коллег, которые хотят оценить уровень компетенций в тестировании. И мне стало интересно, а что у меня с автоматизацией: готова ли я не только «протыкивать» сайт руками, но и изучить язык программирования и писать автотесты. Ведь опытные коллеги говорят — без автоматизации в тестировании перспективы не такие уж и перспективы.

Не буду здесь писать о том, что такое автоматизация и когда ее нужно вводить на проекте, опишу только первый опыт создания UI автотестов. Возможно, начинающие свой путь в профессии найдут здесь несколько полезных для себя идей.

Итак, вдохновившись значимостью автотестов и проконсультировавшись с куратором, я взялась за создание первых автоматизированных тестов. Ввиду неопытности мы решили начать изучение c Behave и Selenium WebDriver.

Behave — фреймворк для написания автотестов на естественном понятном каждому человеку языке с логикой на Python. С помощью Behave можно написать тест-кейсы на естественном языке. Использование Behave в работе может приводить к оверхеду, так как появляются отдельные файлы с тест-кейсами, но первые тесты с ним будут нагляднее. Изучать язык программирования хотелось Python, поэтому выбор пал на Behave, а не Cucumber.

Selenium — потому что просто распространенный инструмент для управления веб-браузерами.

Изучение стоит начать с документации:

Практиковаться можно начать со статьи для  новичков на хабре. Она поможет определиться с тем, что нужно сделать в начале пути. Я создала все директории, описанные в статье, и скопировала код из примера. Код не запустился так легко, как хотелось бы (с этим я сталкивалась позже в принципе на каждом шаге создания тестов), но оттуда я взяла начало для тестов на 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

  1. Словарь локаторов в формате: «[название для элемента]»: (By.[тип локатора], '[атрибут веб-элемента]').
  2. Функции, где используются созданные переменные. В приведенном выше примере используются метод поиска элементов на странице 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

RSS