Добавить в корзинуПозвонить
Найти в Дзене
Self Study

Учимся писать автотесты для web - приложений. Введение.

1. Введение Данной статья является введением в такую интересную и, на сегодняшний момент весьма актуальную тему, как автоматизация web-приложений. Я постараюсь рассказать как и с помощью каких инструментов можно научиться писать автотесты. Вы запустите готовые тесты и увидите как они работают на самом деле. В конце статьи вы можете найти полезные для вас ссылки. 2. Давайте уже начнем Для написания автотестов мы будет использовать связку Selenium + Toolium + Behave. В нашем случае, наиболее удобно будет писать тесты в IDE Pycharm Professional edition, поскольку в ней присутствует поддержка Behave. Вы можете скачать ее с официального сайта и использовать бесплатно в течение 30 дней, тем не менее, вы также можете запустить тесты и в Community edition прочитав данное руководство. Я же воспользуюсь Visual Studio Code, поскольку так вам будет проще всего следовать за мной. 3. Тестовый шаблон Если вы уже установили Visual Studio Code или PyCharm, то вам понадобиться скачать тестовый шаблон
Оглавление

1. Введение

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

2. Давайте уже начнем

Для написания автотестов мы будет использовать связку Selenium + Toolium + Behave. В нашем случае, наиболее удобно будет писать тесты в IDE Pycharm Professional edition, поскольку в ней присутствует поддержка Behave. Вы можете скачать ее с официального сайта и использовать бесплатно в течение 30 дней, тем не менее, вы также можете запустить тесты и в Community edition прочитав данное руководство. Я же воспользуюсь Visual Studio Code, поскольку так вам будет проще всего следовать за мной.

3. Тестовый шаблон

Если вы уже установили Visual Studio Code или PyCharm, то вам понадобиться скачать тестовый шаблон с GitHub. Нажмите Clone or download, а затем Download ZIP.

Скачивам toolium-template
Скачивам toolium-template

Распакуйте архив в удобное для вас место и откройте извлеченную папку в вашем редакторе.

4. Environment

Нам понадобиться установить некоторые зависимости, перечисленные в файле requirements.txt. Если вы не хотите устанавливать их глобально, не забудьте создать и активировать виртуальное окружение.

Чтобы создать виртуальное окружение, откройте терминал, используя комбинацию клавиш Ctrl+~ или нажав в меню VS Code на Terminal -> New Terminal. Затем введите

python -m venv env

или

python3 -m venv env

Вы увидите новую папку env у себя в проекте.

-3

Для активации окружения, введите в терминал

source env/bin/activate

Если вы все сделали правильно, то в терминале появится (env) слева от предложения к вводу новой команды. Для деактивации окружения используйте

deactivate

5. Requirements

Для установки необходимых зависимостей введите в терминал следующую команду:

pip3 install -r "requirements.txt"

или

pip install -r "requirements.txt"

6. Скачиваем web driver

Для запуска автотестов нам понадобиться установить web driver. Если вы используете Chrome в качестве основного браузера, то скачайте chromedriver с учетом версии вашего браузера (у меня, например, версия 76.0.3809.87), для Firefox скачайте geckodriver. Вы также можете самостоятельно найти подходящий web driver в случае, если вы используете другой браузер: iexplore, edge, safari или opera.

После того как вы скачали web driver, вам нужно будет вставить путь до вашего файла в конфигурационный файл в вашем проекте. Откройте папку conf, затем файл properties.cfg. Найдите строчку chrome_driver_path или аналогичную ей с учетом вашего браузера и вставьте туда путь до web driver-а. На Linux это может выглядеть, например так:

chrome_driver_path: /usr/local/bin/chromedriver

В Windows путь к драйверу может выглядеть примерно так:

C:\\Files\\chromedriver.exe

Не забудьте указать в поле type название вашего браузера. Если у вас chrome, то ничего менять не нужно, в противном случае, просто скопируйте соответствующее название вашего браузера из 2 строки конфигурационного файла.

[Driver]
[Driver]

7. Запускаем тесты

На этом этапе мы уже сделали все приготовления и можем попробовать запустить тесты.

7.1 Scenario

Откройте файл login.feature в папке feature вашего проекта. В нем вы увидите 2 готовых теста, каждый из которых начинается с ключевого слова Scenario за которым следует двоеточие и название теста. В верхней части файла есть ключевое слово Feature и ее название.

7. 2 Feature

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

behave --lang-list

то получите список всех поддерживаемых языков, их тут немало.

Список поддерживаемых языков
Список поддерживаемых языков

Для смены языка, например на русский, введите в терминал:

behave --lang=ru

В конце статьи вы найдете ссылку, если вдруг захотите использовать русский язык.

Остальные ключевые слова, которые тут остались (но далеко не все) - это Given, When, Then и And.

7.3 Given, When, Then, And.

Ключевое слово Given позволяет вам описать то, что дано или, другими словами, предусловия теста.

В секции When описываются действия, совершаемые пользователем.

Then - это результаты, то, что должно произойти когда пользователь выполнит шаги When.

Ключевое слово And позволяет добавить дополнительные шаги в любую из секций, либо вы можете написать, например, 2 предусловия, используя повторно слово Given, вместо Given + And.

Вы не обязаны следовать четкой структуре Given, When, Then и можете опустить те ключевые слова которые не требуются для вашего теста.

7.4 Behave

Теперь, когда мы прояснили некоторые моменты, давайте запустим все тесты, которые у нас находятся в feature файле. Для этого введите в терминал следующую команду и нажмите Enter:

behave

Эта команда запустить тесты во всех feature файлах, а так как у нас только 1 такой файл, то будут запущены тесты только из login.feature.

Если же вы хотите запустить все тесты из конкретного feature файла, вы можете воспользоваться примерно такой командой:

behave -i login.feature

А для запуска определенного теста, такой:

behave -n "successful login"

Где, successful login - это, как вы уже поняли, полное название вашего теста, т.е. то, что идет после "Scenario: ".

8. Как это работает

Но как python понимает, что он должен открыть страничку с определенным url, заполнить логин и пароль ?

К сожалению, языки программирования еще не настолько далеко ушли вперед, чтобы делать за нас всю работу, поэтому, для каждой строки вашего теста, будь-то Given, Then, When или And необходимо написать реализацию - шаги.

8.1 Steps

Все шаги находятся в папке steps; в нашем случае там лежит файл login.py который и отвечает за реализацию всех шагов наших тестов из login.feature (к слову, мы не обязаны называть его login.py, просто в данном случае, так более явно прослеживается связь с login.feature).

В login.py вы можете увидеть 4 реализованных шага, хотя в feature файле их 7. Очевидно, что написав 1 раз реализацию для конкретного шага вашего теста, вы можете использовать её в другом тесте.

А для еще большей гибкости, вы можете передать параметры из feature файла в step-ы как это сделано ниже.

Реализация шага When с 2-я параметрами: {username} и {password}
Реализация шага When с 2-я параметрами: {username} и {password}

8.2 Contex

Вы могли заметить, что у каждого step-а есть параметр contex. Это глобальная переменная, которую вы можете использовать для передачи информации между вашими step-ами, посредством присоединения к ней любых атрибутов, например, current_page. Current_page это не какое-то зарезервированное имя, а просто удобное название, которое мы решили использовать в качестве атрибута у переменной contex для хранения текущей web страницы. Аналогичным образом мы могли бы присоединить, например, атрибут actual_result:

contex.actual_result = "результат вашей-тестируемой функции"

И сравнить его с ожидаемым результатом в другом шаге, например в том, который реализует Then:

context.actual_result == какой-то expected_result

8.3 url

Мы еще не успели заглянуть в папку pageobjects и сегодня уже делать этого не будем. Но чтобы завершить эту вводную статью, я хочу отметить еще один момент.

Если вы самостоятельно захотите изучить папку pajeobjects, то найдете нам вот такую строчку:

self.driver.get('{}/login'.format(self.config.get('Test', 'url')))

Эта строчка открывает соответствующую web страничку. На место {} подставляется значение переменной url, которую вы сможете найти в вашем конфигурационном файле properties.cfg в папке conf в конце файла в разделе [Test].

Вы можете дописать в этот раздел еще одну переменную, например так:

[Test]
url: http://the-internet.herokuapp.com
url_google:
https://www.google.com

Тогда открыть другую страничку будет так же просто:

self.driver.get('{}'.format(self.config.get('Test', 'url_google')))

Заметьте, что я удалил /login, поскольку в переменной url_google уже содержится тот адрес, который нам нужен и добавлять к нему еще и /login привело бы к ошибке, ведь такой странички не существует, можете сами проверить -> https://www.google.com/login.

Заключение

Спасибо, что дочитали до конца. Ставьте лайки и подписывайтесь на мой канал.

Если какой-то шаг выполнить у вас не получилось - не сдавайтесь. Попробуйте найти решение самостоятельно, наверняка вы сможете отыскать более подробный ответ в интернете и в следующий раз уже будете знать решений данной проблемы.

Полезные ссылки

1. Документация по Selenium

2. Документация по Behave

3. Бесплатный курс по Selenium на Stepik.org

4. Руководство по использованию Pycharm Community edition для написания автотестов с использованием Behave

5. Visual Studio Code

6. Chromedriver

7. Geckodriver

8. Behave на русском

9. CrazyPython