2. План доклада
1.Необходимость введения автотестов
2.Архитектура тест-приложения
3.Подход к написанию тестов с помощью разработчиков
4.Узкие места при тестировании большого AJAX-
приложения
5.Автоматизация прогона автотестов
5. Проблемы тестирования
вручную
Слишком много времени
“Неожиданные” баги
перед релизом/деплоем
6. Некоторые цифры...
Проверка основного Общее время итерации
Время на регрессионное тестирование
функционала Nimble
занимает 1 день для 2
специалистов
29%
Нужно минимум две
проверки за итерацию
Одному человеку
71%
свойственно ошибаться -
необходимо два
специалиста
11. Подытожим...
Что происходит? Почему происходит?
Повторяемость кода
Изменение небольшого
компонента в AJAX
компонента - влечет за
приложении не
собой смену множества
учитывается в обычных
тест-кейсов
тест-кейсах
13. Понятие блока
Блок - функция (тест-кейс), который покрывает
небольшой неделимый участок функционала
Индикатор неделимости:
Ваш блок теряет всякий смысл, если соответствующий
компонент пропадает.
22. Что должно быть в
документации?
Краткое описание назначения блока
Информация для связи блоков (место “начала” блока,
место “конца” блока)
Детальное описание тест-кейса
Пример использования (опционально)
23. Пример описания блока
Функция login:
1) Открыть урл сайта
2) Заполнить логин и пароль
3) Кликнуть на кнопку логин
4) Дождаться загрузки стартовой страницы
32. Варианты решения
Ожидание через pause
Ожидание отстройки какого-то элемента
Добавление сторонних библиотек в страницу: jQuery,
Prototype, Dojo
33. Наше решение
Встроенный div в котором находится актуальное
количество запросов.
js_condition =
”selenium.browserbot.getCurrentWindow().
document.getElementById("__selenium_ajax
_helper").innerHTML == '0'”
selenium.waitForCondition(js_condition,
timeout)
36. Тестирование 3rd party. Необходимые
механизмы
Работа Selenium с двумя окнами
Выбор фреймов
Циклы для обработки задержек при синхронизации
37. Работа Selenium с окнами и фреймами
Открытие окна и переключение между окнами
sel.open_window("http://gmail.com/", "GMail")
time.sleep(3)
sel.select_window("GMail")
Выбор фрейма
sel.select_frame("canvas_frame")
Возврат из фрейма
sel.select_frame("relative=top")
38. Работа с циклом
Построение цикла для ожидания события синхронизации:
for i in xrange(10):
if <check smth>:
break
else:
time.sleep(60)
<do smth>
41. Еще советы...
При перестройке DOM используйте pause - это
дополнительная проверка на юзабилити
Используйте css локаторы для выбора элементов, где
возможно - ускоряет работу теста
Sizzle - css-селектор для jQuery легко добавляется как в
сервер так и в Selenium IDE.
43. Решение 1. “Кустарное”
Запуск GUI приложений через X-сервера. e.g. Xvfb /
Xephyr
Анализ сырых логов Selenium тестов с подключением
Selenium билд (bash- скриптинг)
44. Преимущества и
недостатки
Сложно в поддержке
Быстрое в реализации
Плохо масштабируемо
Дешевое (запуск на
одном компьютере) Только FF/Webkit (linux
машина)
Ссылка на пример настройки: http://bit.ly/fjq8ge
45. Решение 2. Selenium Grid
Установка Selenium Grid + Hudson Selenium Plugin
Настройка отдельных нод (Windows/Linux/Mac)
Интеграция всего путем бесконечных настроек
46. Преимущество и
недостатки
Масштабируемо Сложность в настройке
Быстрый прогон тестов Дорогое (расходы на
содержание тест фермы)
Поддержка всех платформ
и браузеров Сложности в поддержке
Ссылка на пример настройки: http://bit.ly/gT5MvA