Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,191 views

Published on

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

Published in: Education
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Грязная автоматизация Станислав Бахарев. Performance Lab
  2. 2. Привет! Станислав Бахарев, инженер по обеспечению качества E-mail: s.bakharev@pflb.ru
  3. 3. План • Что такое автоматизация тестирования и как она делается? • Краткий рассказ о средствах автоматизации тестирования. • Мой последний проект.
  4. 4. Автоматизация: базовые вещи • Объекты интерфейса любой системы образуют дерево. • Каждый объект имеет набор свойств. • Маппинг объектов – это привязка к конкертному узлу дерева индивидуального имени. • В конечном итоге автоматизированный сценарий – это всегда программный код.
  5. 5. Автоматизированный тест • Поиск объектов • Имитация действий человека • Проверки корректности результатов действий
  6. 6. Подходы к автоматизации Автоматизация через графический интерфейс Запись и воспроизведение Программирование фреймворка
  7. 7. Запись и воспроизведение • Нажать RECORD • Сделать что-то • Нажать STOP • Доработать получившийся код • Нажать PLAY • … • PROFIT!!!
  8. 8. Запись и воспроизведение: когда нельзя • Динамическая структура элементов интерфейса • Динамические имена/идентификаторы объектов • Частые обновления интерфейса системы • Нетривиальная логика сценариев
  9. 9. Фреймворк для автотестирования • Минусы: – Нужен программист или несколько – Долго делать – Надо обучать тест-дизайнеров • Плюсы: – Отказоустойчивость – Код тестов читабелен – Изначальный контроль над происходящим – Не стыдно
  10. 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("Кнопка сохранения доступна"); }
  11. 11. «Дружелюбность» сгенерированного кода
  12. 12. Хорошая автоматизация • Фреймворк: – Использует API средства автоматизации – Низкоуровневые операции целиком возлагает на средство автоматизации • Тесты создаются исключительно в рамках написанного фреймворка
  13. 13. Средства автоматизации тестирования • Берут начало в конце 1990-х – начале 2000х • Работают с несколькими доменами тестирования • Общий API для работы с разными доменами • Пытаются быть как IDE • Работают медленно • Глючат (зачастую непредсказуемо)
  14. 14. Rational Functional Tester: плюсы • Базируется на Eclipse, код на Java • Относительная стабильность и завершённость продукта • Неплохой API • Поддержка тестирования экзотических доменов
  15. 15. Rational Functional Tester: минусы • Неполная и не всегда понятная документация • Цена не разглашается • Баги, недоработки и скорость работы • Не знает про мобильные платформы • Инструменты автоматизатора глючат и неудобны в использовании
  16. 16. Тестируемая система • Графическая оболочка для генерации запросов к базе данных и отображения их результатов в интерфейсе пользователя. • Предназначение – выявление случаев мошенничества в операциях с бумажными документами. • Написана на Java под JRE версии 1.6.
  17. 17. Тестируемая система
  18. 18. Тестируемая система
  19. 19. Дерево объектов • Окно основано на контейнерах класса «SWT_Window0», так или иначе все объекты содержатся в них. • Уровень вложенности дерева достигает 15. • Реальное дерево объектов не всегда соотносится с внешим видом элементов окна.
  20. 20. Скорость операций • Стандартные операции над объектами: – Запрос свойств(а) объекта – Получение родительского объекта – Получение дочерних объектов – Проверка существования и видимости объекта – Поиск среди дочерних объектов – Ввод или чтение значений полей – Имитация действий пользователя Занимают от 150 до 400 милисекунд
  21. 21. Проверка видимости объекта • Стандартные методы объекта isShowing() и ensureObjectIsVisible() не работают. • RFT не генерирует исключений при попытке манипуляций с недоступным объектом. • Нужно использовать свойство «.visible» у цепочки родительских объектов, чтобы понять, видим ли объект.
  22. 22. Проверка видимости объекта • Кешировать всё дерево объектов на старте теста. • Кешировать все свойства объектов, кроме динамических (например, «.visible»). • Ввести понятие «интервалов заморозки» свойств, в которые динамические свойства могут запрашиваться с реального объекта не более одного раза.
  23. 23. Гибкий интерфейс • Вся структура окна видоизменяема, что позволяет использовать маппинг объектов только на верхних уровнях дерева. • Поиск должен осуществляться только среди видимых объектов.
  24. 24. Гибкий интерфейс • Составляется список всех панелей окна и список видимых панелей в данный момент. • Поиск объектов написан с нуля. • Поиск объектов считается интервалом «заморозки свойств» объектов.
  25. 25. Контекст поиска • Для ускорения поиска объектов нужно выбирать максимально узкий диапазон поиска – в идеале, корневую панель вкладки, на которую был сделан последний переход. • Из-за особенности структуры дерева нельзя найти корневую панель вкладки среди дочерних объектов контроллера вкладок.
  26. 26. Контекст поиска Главное окно Главное меню Куча панелей Вкладки и их содержимое Заголовки вкладок и их клиентские области (прямоугольники области содержимого) Контекст поиска
  27. 27. Контекст поиска • Определение контекста поиска осуществляется путём сравнения координат видимых панелей и координат клиентской области вкладки. • Поиск объектов отказывается «заходить» внутрь невидимых панелей.
  28. 28. Этого мало? • Кешировать результаты поиска в рамках контекста! • Кешировать данные, ассоциированные с объектом! • Кешировать все заголовки вкладок в окне! • Кешировать все заголовки страниц! • Главное окно – не окно! Поиск всегда переадресуется на одну из его основных панелей.
  29. 29. Как это работает: 1 Кеширование дерева… Если в начале теста фреймворку была отправлена команда клика по вкладке «Выборки», то сначала запускается долгий процесс кеширования всего дерева объектов.
  30. 30. Как это работает: 2 Поиск панелей и вкладок… После кеширования фреймворк обнаружит в дереве объектов все панели и заголовки вкладок, которых в окне в прямом смысле сотни.
  31. 31. Как это работает: 3 Поиск видимых панелей… Затем среди всех панелей будет составлен список тех, которые отображаются на экране в настоящий момент. Их значительно больше, чем изображено на рисунке.
  32. 32. Как это работает: 4 Клиентская область… Затем, с помощью привязанного к заголовку вкладки прямоугольника клиентской области будут отсеяны все вкладки, не попадающие в неё.
  33. 33. Как это работает: 5 Определение контекста… В итоге контекстом поиска будет считаться самая высокоуровневая панель из тех, которые вписываются в клиентскую область.
  34. 34. Итоги: скорость работы Кеширование дерева объектов 5 – 30 секунд Кеширование панелей и вкладок 2 – 6 секунд Определение видимых панелей 1,5 – 3 секунды Определение контекста < 200 мс Поиск объектов в контексте 1 – 6 секунд
  35. 35. Итоги Сложность фреймворка Дружелюбность и простота тестов Скорость работы Стабильность Отказоустойчивость Время разработки фреймворка
  36. 36. Выводы • Автоматизировать можно почти всё что угодно • Средства автоматизации дефективные удивительные • Иногда нельзя сделать всё красиво
  37. 37. Время вопросов Доклад подготовил и озвучил Станислав Бахарев, инженер по обеспечению качества E-mail: s.bakharev@pflb.ru

×