38
Грязная автоматизация Станислав Бахарев. Performance Lab

Грязная автоматизация

  • Upload
    sqalab

  • View
    435

  • Download
    2

Embed Size (px)

DESCRIPTION

Презентация Станислава Бахарева на SQA Days-16 14-15 ноября 2014, Санкт-Петербург, Россия www.sqadays.com

Citation preview

Page 1: Грязная автоматизация

Грязная автоматизация

Станислав Бахарев. Performance Lab

Page 2: Грязная автоматизация

Станислав Бахарев,

инженер по обеспечению

качества

E-mail: [email protected]

Привет!

Page 3: Грязная автоматизация

План

• Что такое автоматизация тестирования и как она

делается?

• Краткий рассказ о средствах автоматизации

тестирования.

• Мой последний проект.

Page 4: Грязная автоматизация

Автоматизация: базовые вещи

• Объекты интерфейса любой системы образуют

дерево.

• Каждый объект имеет набор свойств.

• Маппинг объектов – это привязка к конкертному узлу

дерева индивидуального имени.

• В конечном итоге автоматизированный сценарий –

это всегда программный код.

Page 5: Грязная автоматизация

Автоматизированный тест

• Поиск объектов

• Имитация действий человека

• Проверки корректности результатов действий

Page 6: Грязная автоматизация

Подходы к автоматизации

Автоматизация через

графический интерфейс

Запись и

воспроизведение

Программирование

фреймворка

Page 7: Грязная автоматизация

Запись и воспроизведение

• Нажать RECORD

• Сделать что-то

• Нажать STOP

• Доработать получившийся код

• Нажать PLAY

• …

• PROFIT!!!

Page 8: Грязная автоматизация

Запись и воспроизведение:

когда нельзя

• Динамическая структура элементов интерфейса

• Динамические имена/идентификаторы объектов

• Частые обновления интерфейса системы

• Нетривиальная логика сценариев

Page 9: Грязная автоматизация

Фреймворк для автотестирования

• Минусы:

– Нужен программист или несколько

– Долго делать

– Надо обучать тест-дизайнеров

• Плюсы:

– Отказоустойчивость

– Код тестов читабелен

– Изначальный контроль над происходящим

– Не стыдно

Page 10: Грязная автоматизация

Дружелюбность фреймворка

MainWindow main = new MainWindow();

main.clickMenu("Администрирование", "Настройки сервера");

main.clickTab("Параметры сервера");

CachedEditObject edit = main.findEdit("Название сервера:");

edit.setText("!@#$%^&*()");

CachedButtonObject button = main.findButton("Сохранить");

if (!button.isEnabled()) {

Logger.logSuccess("Кнопка сохранения недоступна");

} else {

Logger.logFail("Кнопка сохранения доступна");

}

Page 11: Грязная автоматизация

«Дружелюбность»

сгенерированного кода

Page 12: Грязная автоматизация

Хорошая автоматизация

• Фреймворк:

– Использует API средства автоматизации

– Низкоуровневые операции целиком возлагает на средство

автоматизации

• Тесты создаются исключительно в рамках

написанного фреймворка

Page 13: Грязная автоматизация

Средства автоматизации

тестирования

• Берут начало в конце 1990-х – начале 2000х

• Работают с несколькими доменами тестирования

• Общий API для работы с разными доменами

• Пытаются быть как IDE

• Работают медленно

• Глючат (зачастую непредсказуемо)

Page 14: Грязная автоматизация

Rational Functional Tester: плюсы

• Базируется на Eclipse, код на Java

• Относительная стабильность и завершённость

продукта

• Неплохой API

• Поддержка тестирования экзотических доменов

Page 15: Грязная автоматизация

Rational Functional Tester: минусы

• Неполная и не всегда понятная документация

• Цена не разглашается

• Баги, недоработки и скорость работы

• Не знает про мобильные платформы

• Инструменты автоматизатора глючат и неудобны в

использовании

Page 16: Грязная автоматизация

Тестируемая система

• Графическая оболочка для генерации запросов к

базе данных и отображения их результатов в

интерфейсе пользователя.

• Предназначение – выявление случаев

мошенничества в операциях с бумажными

документами.

• Написана на Java под JRE версии 1.6.

Page 17: Грязная автоматизация

Тестируемая система

Page 18: Грязная автоматизация

Тестируемая система

Page 19: Грязная автоматизация

Дерево объектов

• Окно основано на контейнерах класса

«SWT_Window0», так или иначе все объекты

содержатся в них.

• Уровень вложенности дерева достигает 15.

• Реальное дерево объектов не всегда соотносится с

внешим видом элементов окна.

Page 20: Грязная автоматизация

Скорость операций

• Стандартные операции над объектами:

– Запрос свойств(а) объекта

– Получение родительского объекта

– Получение дочерних объектов

– Проверка существования и видимости объекта

– Поиск среди дочерних объектов

– Ввод или чтение значений полей

– Имитация действий пользователя

Занимают от 150 до 400 милисекунд

Page 21: Грязная автоматизация

Проверка видимости объекта

• Стандартные методы объекта isShowing() и

ensureObjectIsVisible() не работают.

• RFT не генерирует исключений при попытке

манипуляций с недоступным объектом.

• Нужно использовать свойство «.visible» у цепочки

родительских объектов, чтобы понять, видим ли

объект.

Page 22: Грязная автоматизация

Проверка видимости объекта

• Кешировать всё дерево объектов на старте теста.

• Кешировать все свойства объектов, кроме

динамических (например, «.visible»).

• Ввести понятие «интервалов заморозки» свойств, в

которые динамические свойства могут

запрашиваться с реального объекта не более одного

раза.

Page 23: Грязная автоматизация

Гибкий интерфейс

• Вся структура окна видоизменяема, что позволяет

использовать маппинг объектов только на верхних

уровнях дерева.

• Поиск должен осуществляться только среди видимых

объектов.

Page 24: Грязная автоматизация

Гибкий интерфейс

• Составляется список всех панелей окна и список

видимых панелей в данный момент.

• Поиск объектов написан с нуля.

• Поиск объектов считается интервалом «заморозки

свойств» объектов.

Page 25: Грязная автоматизация

Контекст поиска

• Для ускорения поиска объектов нужно выбирать

максимально узкий диапазон поиска – в идеале,

корневую панель вкладки, на которую был сделан

последний переход.

• Из-за особенности структуры дерева нельзя найти

корневую панель вкладки среди дочерних объектов

контроллера вкладок.

Page 26: Грязная автоматизация

Контекст поиска

Главное окно

Главное меню

Куча панелей

Вкладки и их

содержимое

Заголовки вкладок и их

клиентские области

(прямоугольники области

содержимого)

Контекст

поиска

Page 27: Грязная автоматизация

Контекст поиска

• Определение контекста поиска осуществляется

путём сравнения координат видимых панелей и

координат клиентской области вкладки.

• Поиск объектов отказывается «заходить» внутрь

невидимых панелей.

Page 28: Грязная автоматизация

Этого мало?

• Кешировать результаты поиска в рамках контекста!

• Кешировать данные, ассоциированные с объектом!

• Кешировать все заголовки вкладок в окне!

• Кешировать все заголовки страниц!

• Главное окно – не окно! Поиск всегда переадресуется

на одну из его основных панелей.

Page 29: Грязная автоматизация

Как это работает: 1

Кеширование дерева…

Если в начале теста

фреймворку была отправлена

команда клика по вкладке

«Выборки», то сначала

запускается долгий процесс

кеширования всего дерева

объектов.

Page 30: Грязная автоматизация

Как это работает: 2

Поиск панелей и вкладок…

После кеширования

фреймворк обнаружит в

дереве объектов все панели и

заголовки вкладок, которых в

окне в прямом смысле сотни.

Page 31: Грязная автоматизация

Как это работает: 3

Поиск видимых панелей…

Затем среди всех панелей

будет составлен список тех,

которые отображаются на

экране в настоящий момент.

Их значительно больше, чем

изображено на рисунке.

Page 32: Грязная автоматизация

Как это работает: 4

Клиентская область…

Затем, с помощью

привязанного к заголовку

вкладки прямоугольника

клиентской области будут

отсеяны все вкладки, не

попадающие в неё.

Page 33: Грязная автоматизация

Как это работает: 5

Определение контекста…

В итоге контекстом поиска

будет считаться самая

высокоуровневая панель из

тех, которые вписываются в

клиентскую область.

Page 34: Грязная автоматизация

Итоги: скорость работы

Кеширование дерева объектов 5 – 30 секунд

Кеширование панелей и вкладок 2 – 6 секунд

Определение видимых панелей 1,5 – 3 секунды

Определение контекста < 200 мс

Поиск объектов в контексте 1 – 6 секунд

Page 35: Грязная автоматизация

Итоги

Сложность фреймворка

Дружелюбность и простота тестов

Скорость работы

Стабильность

Отказоустойчивость

Время разработки фреймворка

Page 36: Грязная автоматизация

Выводы

• Автоматизировать можно почти всё что угодно

• Средства автоматизации дефективные удивительные

• Иногда нельзя сделать всё красиво

Page 37: Грязная автоматизация

Доклад подготовил и озвучил

Станислав Бахарев, инженер по

обеспечению качества

E-mail: [email protected]

Время вопросов

Page 38: Грязная автоматизация