Upload
devday
View
785
Download
2
Embed Size (px)
DESCRIPTION
Citation preview
Автоматизация UI-тестирования
следующего поколенияИноземцев Иван
Следующее? А что плохо предыдущим? Пожалуй, всё:
● Запустить
● Записать тест
● Допилить тест
● Понять почему упал
● Поддерживать
● Кроссплатформенность? Не слышал
Неутешительный итог
● UI-тесты не нужны
● Capture/replay does not work
O, rly? На самом деле нет
Качественный скачок
● Отказ от идеи черного ящика
● Высокоуровневый подход во всем
Как все начиналось
● Начало разработки – декабрь 2009
● Первый публичный релиз – август 2011
● Разработчиков – 1-5
Наши клиенты
Внутри Xored
● 3 QAs
● 4669 UI tests
● 10-30 tests/day/QA
Веселая история про шахматы
Запуск приложения
● Пользователь○ выбрать○ запустить
● Q7○ проанализировать состав приложения○ внедрить свой runtime○ проинстументировать байткод на этапе загрузки○ подписаться на все что можно○ слушать локальный порт
Запись тестов
● Пользователь○ начать запись○ выполнить действия○ окончить запись
● Q7○ Из тысяч UI-событий понять действия○ Пропустить неважные○ Записать важные
Пример хардкора
Eclipse Command Language
● inspired by TCL & PowerShell● команды с аргументами и in/out● соединяются pipe'ами
● в команду можно засунуть команду ({})
● в команду можно засунуть результат ([])
ECL – понятен всем
Управление состоянием
Test case – действия, переводящие систему из заданного состояния в ожидаемое
● Описание состояния декларативно
● Описание действий императивно
Imperative vs Declarative
● Imperative○ Если есть проекты в workspace'е, удалить их○ Если есть открытые редакторы, закрыть их○ Создать новый проект whatever○ Создать в нем класс Program○ Открыть его в редакторе○ ???○ P̶R̶O̶F̶I̶T̶!̶ Начать полезные действия
● Declarative○ Один проект whatever с классом Program○ Класс Program открыт
Управление состоянием в Q7
● Контекст описывает проекцию состояния○ Проекты в workspace'е
○ Открытые редакторы и вьюхи
○ Настройки
○ Файловая система
● Контексты переиспользуются
● Неважные части состояния не описываем
Воспроизведение
● Отслеживаем последствия действий○ listener'ы
○ data bindings
○ jobs
○ async execs
● Знаем когда операция завершилась
Пример хардкора
Внезапно зависание на модальных диалогахПричина: свистелка в Mac OS X – красиво переливающаяся кнопочка
Continuous integration
● Command-line Q7 Runner
● Q7 Maven Plugin
● JUnit XML для серверов
● HTML со скриншотами для людей
Q7 Server
● Тесты создавать легко => их число
быстро растет => исполняются все
дольше
● Тесты изолированы => их можно
параллелить
● 30 nodes
● 20 000 execs/day
Вопросы?