testing with selenium

24
Тестирование веб-приложений в Selenium Марк Заславский, [email protected]

Upload: osll

Post on 13-Apr-2017

2.275 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Testing with Selenium

Тестирование веб-приложений в Selenium

Марк Заславский, [email protected]

Page 2: Testing with Selenium

Структура доклада

● Доклад:– Что такое Selenium

– Примеры тестов

– Использование Selenium в Continious Integration проекта Geo2Tag

● Скачать примеры http://bit.ly/1T36po8● Примеры подготовлены для

– Ubuntu 14.04

– Python 2.7

– Selenium 2.45

Page 3: Testing with Selenium

Что такое Selenium

● Selenium WebDriver – инструмент для автоматизации тестирования веб-приложения в браузере.

● Поставляется в виде библиотеки.

● Единый подход к разным браузерам.

Page 4: Testing with Selenium

Схема работы

Page 5: Testing with Selenium

Возможности Selenium

● протестировать js логику● протестировать пользовательский веб-

интерфейс (в том числе и css)● автоматизировать действия на сложных

вебстраницах

Page 6: Testing with Selenium

Пример: Когда нужен Selenium

● Есть социальная сеть, которую активно разрабатывает большая команда,

● Хочется быть уверенным, что основные юзкейсы не сломались перед очередным релизом:– Авторизация

– Просмотр сообщений

– Отправка сообщений

– Выход из системы

● Решение – Selenium скрипт для воспроизведения каждого юзкейса.

Page 7: Testing with Selenium

Пример: Когда нужен Selenium 2

● Вконтакте есть закладки (<3), но нет поиска по ним.

● В закладках может накопиться очень много полезных записей.

● Чтобы найти старые записи, нужно пролистать страницу очень много раз вниз.

● Решение:– Selenium приложение, которое скролит закладки

до дна и индексирует содержимое (ссылка на контент, аннотация, дата)

Page 8: Testing with Selenium

Реализации Selenium

● Поддержка языков

– Официально: Java, C#, Ruby, Python, NodeJS

– Неофициально: Php, Perl, Objective C, Haskell ….

● Поддержка браузеров

– Chrome, Opera, Firefox, Safari, Android, Ios, Windows Phone, BlackBerry

Page 9: Testing with Selenium

Основные интерфейсы

● Поиск элементов: xpath, css, id, tag, name, link content, class

● Установка задержек: явные и неявные● Выполнение действий со страницей:

– Произвольный js код

– Пользовательский ввод

– Переходы на другие страницы/назад и вперед по истории

– Взаимодействие с диалогами

– Drag n Drop

Page 10: Testing with Selenium

Базовая последовательность работы с Selenium

1.Создаем объект webdriver

2.Открываем веб-страницу

3.Устанавливаем величину задержки ожидания действий веб-страницы

4.Ищем элементы

5.Выполняем действия над элементами

6.Проверяем результаты действий через Assert

Page 11: Testing with Selenium

example1.py

● Ищем слово Selenium в Ya.ru● Последовательность:

– Запускаем браузер

– Ищем поле ввода с атрибутом name='text'

– Вводим 'Selenium'

– Вводим '\n'

Page 12: Testing with Selenium

example1.py - анализ

● driver.implicitly_wait() устанавливает максимальное время в секундах, которое Selenium будет ждать, пока не появится искомый для find_element_by_* элемент.

● driver.close() - закрывает браузер● Появляющееся окно браузера не находится

в режиме инкогнито

Page 13: Testing with Selenium

example2.py

● Интегрируемся с python unittest – помещаем логику тестирования в класс-наследник TestCase

● Добавляем проверки через TestCase.assert* ● Получаем отформатированный вывод

результатов теста в консоль + индикацию о успешности тестов в кодах возврата скрипта.

Page 14: Testing with Selenium

Js unittests + selenium

● Проблема – есть много js бизнес-логики и ее хочется автоматизированно юнит-тестировать

● Решение:– Создаем веб-страницу /js-tests с js-юниттестами

– Настраиваем все так, чтобы js тесты выполнялись сами при обновлении страницы

– В selenium тесте открываем /js-tests и проверяем, что содержимое страницы соответствует успешному прохождению js тестов

Page 15: Testing with Selenium

QUnit

● Позволяет проводить юнит тестирование любой сложности для js

● В том числе – для асинхронных методов● Представляет результаты в удобном для

анализа виде (статистика по каждому тесту + время выполнения)

● Запускает тесты сразу после открытия страницы

Page 16: Testing with Selenium

Example3.html

● Что мы видим на странице

● Как организованы тесты

● В каких элементах разметки можно узнать:

– Что тесты закончили выполнение

– Сколько тестов упало

Page 17: Testing with Selenium

example3.py( QUnit + Selenium)

● Открываем страницу example3.html

● Проверяем что она:– Все тесты

завершили работу

– Показывает, что все тесты пройдены

Page 18: Testing with Selenium

Автоматизация тестирования через Selenium - наблюдения

● Отдельный скрипт для запуска тестирования с указанием имени сайта, который проверяем

● Каждый раз открывать браузер – долго!

● Параметризация тестов – надо заложить сразу

– Помогает не привязатся намертво к конкретному серверу и делает набор тестов отличным инструментом проверки

– Правильный базовый класс

Page 19: Testing with Selenium

Очистка кэша браузера при тестировании

● Проблема: Selenium не имеет стандартного интерфейса для очистки кэша браузера

● Варианты:– Очищать вручную

– Каждый раз использовать чистую среду (изолировать тесты)

– Использовать инвалидацию кэша на стороне веб-приложения

Page 20: Testing with Selenium

Geo2Tag

● Open Source платформа для сервисов, использующих данные о местоположении

● Веб-интерфейсы для администрирования● REST API

Page 21: Testing with Selenium

Как Selenium используется в Geo2Tag

● Для каждого коммита в репозиторий запускаются проверки (unittest, integration tests, Selenium)

● Все проверки проходят последовательно● Проверка происходит в изолированной

виртуальной машине ● В качестве способа проверки для большой

части Frontend-задач выступает Selenium/QunitJs тест

Page 22: Testing with Selenium

Как Selenium используется в Geo2Tag - схема

Page 23: Testing with Selenium

Как Selenium используется в Geo2Tag - технологии

● ОC – Ubuntu 14.04 без графической подсистемы

● Изоляция сборок друг от друга – Docker● Непрерывная интеграция – Jenkins● Виртуальный Х-сервер xvfb

Page 24: Testing with Selenium

Ссылки● Что такое 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