Всем привет!
Сегодня я хочу поделится нашим опытом автоматизации тестирования веб-приложения с использованием Selenium WebDriver и фреймворка Behave.
Если интересно добро пожаловать под кат.
Перед началом
Тут я не буду подробно останавливаться на том, как искать элементы, и как взаимодействовать с ними при помощи selenium webdriver, а расскажу только о том, как можно легко и удобно писать и гонять тесты написанные на python с использованием behave.
1. Установка нужностей
Для начала нам понадобится python. Скачать его можно тут. Я буду использовать версию 2.7.6, а вы можете использовать ту, которая вам больше нравится. Кроме python нам еще понадобятся selenium и сам behave.
Установить selenium можно с использованием pip:
pip install selenium
Selenium — это инструмент для тестирования Web-приложений.
Так же про него много писали на Хабре:
тут, и тут даже есть частичный перевод не официальной документации
Подробнее про Selenium можно узнать:
официальная документация
перевод
не официальная для selenium with python
официальная для selenium with python
Теперь установим behave. Можно с использованием pip:
pip install behave
А можно скачать тут: behave на pypi
Что такое behave? Behave — это фрейморк для программирования через поведения в python-стиле(Что такое Behavior-driven development?).
Behave использует тесты написанные на натуральном языке, с логикой на python.
Он обладает несколькими серьезными плюсами:
+ Легкая установка
+ Отчеты в формате junit
+ Тесты может писать любой человек на естественном языке.
+ Есть возможность интеграции с jenkins (с другими CI, наверное, тоже)
Сравнение behave с похожими инструментами.
Когда все необходимое установлено можно приступать к настройке окружения для написания и выполнения тестов.
2. Настройка
Директория откуда будем запускать тесты должна содержать:
1. Файлы с расширением .feature — сами тесты.
2. Директорию steps, которая содержит файлы .py с описанием шагов, из которых составляются тесты, на python.
Опционально можно добавить в директорию содержащую папку steps файл — environment.py c кодом который надо будет выполнять прежде или после определенных событий в тесте.
Подробное описание этого файла тут.
Наш пример будет максимально простым, поэтому мы не будем включать этот файл.
Итого, как выглядит наша директория в минимальной комплектации:
features/
features/everything.feature
features/steps/
features/steps/steps.py
пример из behave tutorial
Вот и вся настройка, можно писать первый тест!
3. Написание и запуск первого теста
Для начала нам понадобится создать в папке steps, файл c расширением .py, в котором мы опишем логику нашего теста.
Назовем этот файл first_test.py.
Для примера, я решил взять простой кейс тестирования поисковой формы ya.ru.
Итак, скопируйте код ниже в файл firs_test.py.
# -*- coding: utf-8 -*- from behave import * from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time #Откроем главную страницу. Передадим в качестве аргумента адрес страницы. @given('website "{url}"') def step(context, url): #Измените строку, для выполнения теста в другом браузере context.browser = webdriver.Firefox() context.browser.maximize_window() context.browser.get("http://ya.ru") #Теперь нажмем на кнопку "Найти" @then("push button with text '{text}'") def step(context, text): WebDriverWait(context.browser, 120).until( EC.element_to_be_clickable((By.XPATH, '//button')) ) context.browser.find_element_by_xpath('//button').click() #Проверим, что мы на странице с результатами поиска, есть некоторый искомый текст @then("page include text '{text}'") def step(context, text): WebDriverWait(context.browser, 120).until( EC.presence_of_element_located((By.XPATH, '//*[contains(text(), "%s")]' % text)) ) assert context.browser.find_element_by_xpath('//*[contains(text(), "%s")]' % text) context.browser.quit()
Если лень смотреть код, то логика такая:
1. Открыть ya.ru
2. Клацнуть на кнопку «Найти»
3. Проверить, что на странице выдачи есть текст: «Задан пустой поисковый запрос»
Теперь когда готова логика теста можно написать сам тест.
В папке с директорией steps создадим файл .feature, в котором используем написанные шаги:
#Укажем что это за фича Feature: Checking search #Укажем имя сценария (в одной фиче может быть несколько) Scenario: Сheck some text in search results #И используем наши шаги. Given website "ya.ru" Then push button with text 'Найти' Then page include text 'Задан пустой поисковый запрос'
Шаги из теста, по декораторам свяжутся с python функциями. (Декораторы обозначены знаком @)
Теперь запустим наш тест.
Перейдем в папку, где он лежит, и выполним команду:
behave -i first_test.feature
Флаг -i указывает, что необходимо запустить только файлы подходящие под паттерн поиска.
Если запустить c флагом —junit то получим отчет в формате junit.
Если все прошло хорошо, то отчет будет, примерно, таким:
Feature: Checking search # first_test.feature:1 Scenario: Send some text in search box and check some text in search results # ya.feature:2 Given website "ya.ru" # steps/test.py:9 0.662s Then push button with text 'Найти' # steps/test.py:14 0.242s Then page include text 'Задан пустой поисковый запрос' # steps/test.py:22 1.009s 1 feature passed, 0 failed, 0 skipped 1 scenario passed, 0 failed, 0 skipped 3 steps passed, 0 failed, 0 skipped, 0 undefined Took 0m1.913s
Заключение
Здесь я привел только самое основное.
Фичи selenium неисчислимы, да и behave много чего умеет. В том числе, отчеты в формате junit и интеграцию с jenkis.
Спасибо за внимание, и хороших выходных!
Список использованных материалов
Селениум:
habrahabr.ru/post/152653
habrahabr.ru/post/248559
www.seleniumhq.org/docs
selenium2.ru/docs.html
selenium-python.readthedocs.org/index.html
selenium.googlecode.com/svn/trunk/docs/api/py/index.html
Behave:
pythonhosted.org/behave
Python:
pypi.python.org
python.org
ссылка на оригинал статьи http://habrahabr.ru/post/262929/
Добавить комментарий