Автоматизация UI-тестирования следующего поколения

Preview:

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

Вопросы?

Recommended