testing with selenium
TRANSCRIPT
Тестирование веб-приложений в Selenium
Марк Заславский, [email protected]
Структура доклада
● Доклад:– Что такое 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