Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

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

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité

Consultez-les par la suite

1 sur 38 Publicité

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

Télécharger pour lire hors ligne

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

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

Publicité
Publicité

Plus De Contenu Connexe

Diaporamas pour vous (20)

Les utilisateurs ont également aimé (8)

Publicité

Similaire à Грязная автоматизация (20)

Plus par SQALab (20)

Publicité

Plus récents (20)

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

  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

×