Тестирование веб-приложений в
Selenium
Марк Заславский, mark.zaslavskiy@gmail.com
Структура доклада
● Доклад:
– Что такое Selenium
– Примеры тестов
– Использование Selenium в Continious Integration
проекта Geo2Tag
●
Скачать примеры http://bit.ly/1T36po8
● Примеры подготовлены для
– Ubuntu 14.04
– Python 2.7
– Selenium 2.45
Что такое Selenium
● Selenium WebDriver
– инструмент для
автоматизации
тестирования веб-
приложения в
браузере.
● Поставляется в виде
библиотеки.
● Единый подход к
разным браузерам.
Схема работы
Возможности Selenium
● протестировать js логику
● протестировать пользовательский веб-
интерфейс (в том числе и css)
● автоматизировать действия на сложных
вебстраницах
Пример: Когда нужен Selenium
● Есть социальная сеть, которую активно
разрабатывает большая команда,
● Хочется быть уверенным, что основные юзкейсы
не сломались перед очередным релизом:
– Авторизация
– Просмотр сообщений
– Отправка сообщений
– Выход из системы
● Решение – Selenium скрипт для
воспроизведения каждого юзкейса.
Пример: Когда нужен Selenium 2
● Вконтакте есть закладки (<3), но нет поиска
по ним.
● В закладках может накопиться очень много
полезных записей.
● Чтобы найти старые записи, нужно
пролистать страницу очень много раз вниз.
● Решение:
– Selenium приложение, которое скролит закладки
до дна и индексирует содержимое (ссылка на
контент, аннотация, дата)
Реализации Selenium
● Поддержка языков
– Официально: Java, C#, Ruby, Python,
NodeJS
– Неофициально: Php, Perl, Objective C,
Haskell ….
● Поддержка браузеров
– Chrome, Opera, Firefox, Safari, Android, Ios,
Windows Phone, BlackBerry
Основные интерфейсы
● Поиск элементов: xpath, css, id, tag, name,
link content, class
● Установка задержек: явные и неявные
● Выполнение действий со страницей:
– Произвольный js код
– Пользовательский ввод
– Переходы на другие страницы/назад и вперед по
истории
– Взаимодействие с диалогами
– Drag n Drop
Базовая последовательность
работы с Selenium
1.Создаем объект webdriver
2.Открываем веб-страницу
3.Устанавливаем величину задержки
ожидания действий веб-страницы
4.Ищем элементы
5.Выполняем действия над элементами
6.Проверяем результаты действий через
Assert
example1.py
● Ищем слово Selenium в Ya.ru
● Последовательность:
– Запускаем браузер
– Ищем поле ввода с атрибутом name='text'
– Вводим 'Selenium'
– Вводим 'n'
example1.py - анализ
● driver.implicitly_wait() устанавливает
максимальное время в секундах, которое
Selenium будет ждать, пока не появится
искомый для find_element_by_* элемент.
● driver.close() - закрывает браузер
● Появляющееся окно браузера не находится
в режиме инкогнито
example2.py
● Интегрируемся с python unittest – помещаем
логику тестирования в класс-наследник
TestCase
● Добавляем проверки через TestCase.assert*
● Получаем отформатированный вывод
результатов теста в консоль + индикацию о
успешности тестов в кодах возврата скрипта.
Js unittests + selenium
● Проблема – есть много js бизнес-логики и ее
хочется автоматизированно юнит-
тестировать
● Решение:
– Создаем веб-страницу /js-tests с js-юниттестами
– Настраиваем все так, чтобы js тесты
выполнялись сами при обновлении страницы
– В selenium тесте открываем /js-tests и проверяем,
что содержимое страницы соответствует
успешному прохождению js тестов
QUnit
● Позволяет проводить юнит тестирование
любой сложности для js
● В том числе – для асинхронных методов
● Представляет результаты в удобном для
анализа виде (статистика по каждому тесту
+ время выполнения)
● Запускает тесты сразу после открытия
страницы
Example3.html
● Что мы видим на
странице
● Как организованы
тесты
● В каких элементах
разметки можно
узнать:
– Что тесты закончили
выполнение
– Сколько тестов
упало
example3.py( QUnit + Selenium)
● Открываем
страницу
example3.html
● Проверяем что
она:
– Все тесты
завершили
работу
– Показывает,
что все тесты
пройдены
Автоматизация тестирования
через Selenium - наблюдения
● Отдельный скрипт для запуска тестирования с
указанием имени сайта, который проверяем
● Каждый раз открывать браузер – долго!
● Параметризация тестов – надо заложить сразу
– Помогает не привязатся намертво к
конкретному серверу и делает набор тестов
отличным инструментом проверки
– Правильный базовый класс
Очистка кэша браузера при
тестировании
● Проблема: Selenium не имеет стандартного
интерфейса для очистки кэша браузера
● Варианты:
– Очищать вручную
– Каждый раз использовать чистую среду
(изолировать тесты)
– Использовать инвалидацию кэша на стороне
веб-приложения
Geo2Tag
● Open Source платформа для сервисов,
использующих данные о местоположении
● Веб-интерфейсы для администрирования
● REST API
Как Selenium используется в
Geo2Tag
● Для каждого коммита в репозиторий
запускаются проверки (unittest, integration tests,
Selenium)
● Все проверки проходят последовательно
● Проверка происходит в изолированной
виртуальной машине
● В качестве способа проверки для большой
части Frontend-задач выступает
Selenium/QunitJs тест
Как Selenium используется в
Geo2Tag - схема
Как Selenium используется в
Geo2Tag - технологии
● ОC – Ubuntu 14.04 без графической
подсистемы
● Изоляция сборок друг от друга – Docker
● Непрерывная интеграция – Jenkins
● Виртуальный Х-сервер xvfb
Ссылки
● Что такое Selenium
– http://docs.seleniumhq.org/projects/webdriver/
– http://habrahabr.ru/post/152653/
● Python Selenium
http://selenium-python.readthedocs.org/
● CSS тестирование
http://habrahabr.ru/post/190358/
● QunitJs https://qunitjs.com/
● Geo2Tag https://github.com/geo2tag/geo2tag
●
Примеры к докладу http://bit.ly/1T36po8

Testing with Selenium

  • 1.
  • 2.
    Структура доклада ● Доклад: –Что такое Selenium – Примеры тестов – Использование Selenium в Continious Integration проекта Geo2Tag ● Скачать примеры http://bit.ly/1T36po8 ● Примеры подготовлены для – Ubuntu 14.04 – Python 2.7 – Selenium 2.45
  • 3.
    Что такое Selenium ●Selenium WebDriver – инструмент для автоматизации тестирования веб- приложения в браузере. ● Поставляется в виде библиотеки. ● Единый подход к разным браузерам.
  • 4.
  • 5.
    Возможности Selenium ● протестироватьjs логику ● протестировать пользовательский веб- интерфейс (в том числе и css) ● автоматизировать действия на сложных вебстраницах
  • 6.
    Пример: Когда нуженSelenium ● Есть социальная сеть, которую активно разрабатывает большая команда, ● Хочется быть уверенным, что основные юзкейсы не сломались перед очередным релизом: – Авторизация – Просмотр сообщений – Отправка сообщений – Выход из системы ● Решение – Selenium скрипт для воспроизведения каждого юзкейса.
  • 7.
    Пример: Когда нуженSelenium 2 ● Вконтакте есть закладки (<3), но нет поиска по ним. ● В закладках может накопиться очень много полезных записей. ● Чтобы найти старые записи, нужно пролистать страницу очень много раз вниз. ● Решение: – Selenium приложение, которое скролит закладки до дна и индексирует содержимое (ссылка на контент, аннотация, дата)
  • 8.
    Реализации Selenium ● Поддержкаязыков – Официально: Java, C#, Ruby, Python, NodeJS – Неофициально: Php, Perl, Objective C, Haskell …. ● Поддержка браузеров – Chrome, Opera, Firefox, Safari, Android, Ios, Windows Phone, BlackBerry
  • 9.
    Основные интерфейсы ● Поискэлементов: xpath, css, id, tag, name, link content, class ● Установка задержек: явные и неявные ● Выполнение действий со страницей: – Произвольный js код – Пользовательский ввод – Переходы на другие страницы/назад и вперед по истории – Взаимодействие с диалогами – Drag n Drop
  • 10.
    Базовая последовательность работы сSelenium 1.Создаем объект webdriver 2.Открываем веб-страницу 3.Устанавливаем величину задержки ожидания действий веб-страницы 4.Ищем элементы 5.Выполняем действия над элементами 6.Проверяем результаты действий через Assert
  • 11.
    example1.py ● Ищем словоSelenium в Ya.ru ● Последовательность: – Запускаем браузер – Ищем поле ввода с атрибутом name='text' – Вводим 'Selenium' – Вводим 'n'
  • 12.
    example1.py - анализ ●driver.implicitly_wait() устанавливает максимальное время в секундах, которое Selenium будет ждать, пока не появится искомый для find_element_by_* элемент. ● driver.close() - закрывает браузер ● Появляющееся окно браузера не находится в режиме инкогнито
  • 13.
    example2.py ● Интегрируемся сpython unittest – помещаем логику тестирования в класс-наследник TestCase ● Добавляем проверки через TestCase.assert* ● Получаем отформатированный вывод результатов теста в консоль + индикацию о успешности тестов в кодах возврата скрипта.
  • 14.
    Js unittests +selenium ● Проблема – есть много js бизнес-логики и ее хочется автоматизированно юнит- тестировать ● Решение: – Создаем веб-страницу /js-tests с js-юниттестами – Настраиваем все так, чтобы js тесты выполнялись сами при обновлении страницы – В selenium тесте открываем /js-tests и проверяем, что содержимое страницы соответствует успешному прохождению js тестов
  • 15.
    QUnit ● Позволяет проводитьюнит тестирование любой сложности для js ● В том числе – для асинхронных методов ● Представляет результаты в удобном для анализа виде (статистика по каждому тесту + время выполнения) ● Запускает тесты сразу после открытия страницы
  • 16.
    Example3.html ● Что мывидим на странице ● Как организованы тесты ● В каких элементах разметки можно узнать: – Что тесты закончили выполнение – Сколько тестов упало
  • 17.
    example3.py( QUnit +Selenium) ● Открываем страницу example3.html ● Проверяем что она: – Все тесты завершили работу – Показывает, что все тесты пройдены
  • 18.
    Автоматизация тестирования через Selenium- наблюдения ● Отдельный скрипт для запуска тестирования с указанием имени сайта, который проверяем ● Каждый раз открывать браузер – долго! ● Параметризация тестов – надо заложить сразу – Помогает не привязатся намертво к конкретному серверу и делает набор тестов отличным инструментом проверки – Правильный базовый класс
  • 19.
    Очистка кэша браузерапри тестировании ● Проблема: Selenium не имеет стандартного интерфейса для очистки кэша браузера ● Варианты: – Очищать вручную – Каждый раз использовать чистую среду (изолировать тесты) – Использовать инвалидацию кэша на стороне веб-приложения
  • 20.
    Geo2Tag ● Open Sourceплатформа для сервисов, использующих данные о местоположении ● Веб-интерфейсы для администрирования ● REST API
  • 21.
    Как Selenium используетсяв Geo2Tag ● Для каждого коммита в репозиторий запускаются проверки (unittest, integration tests, Selenium) ● Все проверки проходят последовательно ● Проверка происходит в изолированной виртуальной машине ● В качестве способа проверки для большой части Frontend-задач выступает Selenium/QunitJs тест
  • 22.
  • 23.
    Как Selenium используетсяв Geo2Tag - технологии ● ОC – Ubuntu 14.04 без графической подсистемы ● Изоляция сборок друг от друга – Docker ● Непрерывная интеграция – Jenkins ● Виртуальный Х-сервер xvfb
  • 24.
    Ссылки ● Что такоеSelenium – http://docs.seleniumhq.org/projects/webdriver/ – http://habrahabr.ru/post/152653/ ● Python Selenium http://selenium-python.readthedocs.org/ ● CSS тестирование http://habrahabr.ru/post/190358/ ● QunitJs https://qunitjs.com/ ● Geo2Tag https://github.com/geo2tag/geo2tag ● Примеры к докладу http://bit.ly/1T36po8