Автоматизация Flex-приложений с помощью Selenium RC<br />Игорь Хрол<br />
Немного о себе<br />Игорь Хрол<br />Специализируюсь на автоматизации тестирования с 2006года<br />Инструменты:<br />Seleni...
Что будет в докладе?<br />Немного о проекте<br />Какой стоял выбор для автоматизации Flex’a?<br />Сравнение инструментов<b...
О проекте<br />www.atg.com (с января 2011-го – часть Oracle)<br />Середина 2009-го – вся UI-автоматизацияна HP QTP<br />Ко...
Варианты Flex-автоматизации<br />HP QTP +  Flex QTP add-in<br />Selenium-Flex API + Selenium RC + Java<br />FunFX + Watir ...
Результаты оценки – скорость работы (JSP)<br />Цикличное создание-удаление 100 сущностей в JSP<br />Время выполнения сцена...
Результаты оценки – скорость работы (Flex)<br />Цикличное создание-удаление 100 сущностей вo Flex<br />Время выполнения сц...
Результаты оценки – скорость работы (Flex)<br />Цикличная навигация по Flex – 100 раз<br />Время выполнения сценария в мин...
Недостатки QTP<br />Нестабильная работа<br />Распознавание UI-объектов с учётом практически всей иерархии объектов<br />От...
Схема работы Selenium Flex API<br />Selenium RC<br />Код тест-кейса (С#, Java, Python, Ruby и другое)<br />HTTP<br />Брауз...
Поддержка различных браузеров<br />Нужна ли вообще?<br />Различные версии IE<br />Google Chrome, Safari, Opera…<br />Ну и ...
Структура фреймворка - локаторы<br />Подобие ХPath, но не совсем<br />Общая структура:<br />property:value<br />property1:...
Пример локатора<br />id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/className:BrowsePanel/id:ancestorNavBa...
Пример локатора<br />id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/name:mainPanel/className:HBox,numChild...
Структура фреймворка<br />Соотношение: <br />класс из Flex’a↔класс из Java-фреймворка<br />
Структура фреймворка<br />Java-класс инициализируется:<br />своим локатором<br />локатором контейнера<br />
Структура фреймворка<br />«Склейка» локаторов на уровне базового конструктора<br />
Структура фреймворка - синхронизация<br />При обращении к Java-объекту – ждём соответствующего объекта на UI<br />Синхрони...
Tips&Tricks – FlexSpy<br />Особенности:<br />Запускается внутри флеш-объекта (может вызывать побочные эффекты)<br />Лучше ...
FlexSpy<br />
Обнаружение свойств объектов FlashInspector<br />Плагин к Firefox<br />Требует:<br />Установки Firebug<br />Debug-версию F...
Сложности<br />Альтернативная разработка <br />Selenium Flex API своими силами<br />Улучшена система локаторов<br />Исправ...
Сложности<br />«Нативные» нажатия на кнопки – например для закачивания/скачивания файлов<br />Решение: AutoIT<br />Создани...
Интеграция с существующим кодом на QTP<br />Цель: выполнение действий во Flex-еиз QTP с помощью существующего Java-кода<br...
Поддержка WebDriver (Selenium 2)<br />Браузер<br />Код тест-кейса (С#, Java, Python, Ruby и другое)<br />WebDriver API<br ...
Результаты<br />~400k строк кода<br />~4500 java-классов (~3500 автоматизированных тест кейсов)<br />Около 5 суток работы ...
Вопросы<br />
Upcoming SlideShare
Loading in …5
×

Automation Flex Applications with Selenium rc

1,405 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,405
On SlideShare
0
From Embeds
0
Number of Embeds
102
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Май 2010 по Gartner – в лидерах 2 решения в eCommerce: ATG и IBM WebSphere Commerce.
  • Watir с FunFX – мы не смогли стабильно автоматизировать эталонный сценарий.Различие технологий Ruby-Java остановило от дальнейшего рассмотрения этого сценария.
  • История про Firefox + WebSphere.Усилия на поддержку кроссбраузерности сократились на Flex.
  • Отсутствует синхронизация в первой ветке if’a.
  • Есть определённая нестабильность.
  • Пример с «Browse…» - ограничения по Security FlashPlayer’a.
  • 5-10человеко-лет разработки
  • Automation Flex Applications with Selenium rc

    1. 1. Автоматизация Flex-приложений с помощью Selenium RC<br />Игорь Хрол<br />
    2. 2. Немного о себе<br />Игорь Хрол<br />Специализируюсь на автоматизации тестирования с 2006года<br />Инструменты:<br />Selenium, HP QTP, Watir, TestComplete, Jmeter<br />E-mail: khroliz@gmail.com<br />
    3. 3. Что будет в докладе?<br />Немного о проекте<br />Какой стоял выбор для автоматизации Flex’a?<br />Сравнение инструментов<br />Выбранное решение и архитектура<br />Tips&Tricks<br />Текущие результаты работы<br />
    4. 4. О проекте<br />www.atg.com (с января 2011-го – часть Oracle)<br />Середина 2009-го – вся UI-автоматизацияна HP QTP<br />Конец 2009-го – первые версии приложения с Flexи решение начать автоматизацию на Selenium<br />
    5. 5. Варианты Flex-автоматизации<br />HP QTP + Flex QTP add-in<br />Selenium-Flex API + Selenium RC + Java<br />FunFX + Watir + Ruby<br />
    6. 6. Результаты оценки – скорость работы (JSP)<br />Цикличное создание-удаление 100 сущностей в JSP<br />Время выполнения сценария в минутах<br />
    7. 7. Результаты оценки – скорость работы (Flex)<br />Цикличное создание-удаление 100 сущностей вo Flex<br />Время выполнения сценария в минутах<br />QTP не поддерживает Firefox с Flex<br />
    8. 8. Результаты оценки – скорость работы (Flex)<br />Цикличная навигация по Flex – 100 раз<br />Время выполнения сценария в минутах<br />QTP не поддерживает Firefox с Flex<br />
    9. 9. Недостатки QTP<br />Нестабильная работа<br />Распознавание UI-объектов с учётом практически всей иерархии объектов<br />Отсутствие удобного языка и средств разработки<br />
    10. 10. Схема работы Selenium Flex API<br />Selenium RC<br />Код тест-кейса (С#, Java, Python, Ruby и другое)<br />HTTP<br />Браузер<br />Selenium Core<br />user-extensions.js<br />Тестируемое приложение<br />ExternalInterface<br />Flex<br />
    11. 11. Поддержка различных браузеров<br />Нужна ли вообще?<br />Различные версии IE<br />Google Chrome, Safari, Opera…<br />Ну и конечно Firefox<br />
    12. 12. Структура фреймворка - локаторы<br />Подобие ХPath, но не совсем<br />Общая структура:<br />property:value<br />property1:value1,property2:value2<br />property1:value1/property2:value2<br />property1.subproperty11:value11,property2:value2/property3.subproperty31:value31<br />Примеры…<br />
    13. 13. Пример локатора<br />id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/className:BrowsePanel/id:ancestorNavBar/id:dropdownButtonArea/id:nodeText<br />id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/className:BrowsePanel/id:ancestorNavBar/id:dropdownButtonArea/id:nodeText<br />id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/className:BrowsePanel/id:ancestorNavBar/id:dropdownButtonArea/id:nodeText<br />id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/className:BrowsePanel/id:ancestorNavBar/id:dropdownButtonArea/id:nodeText<br />id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/className:BrowsePanel/id:ancestorNavBar/id:dropdownButtonArea/id:nodeText<br />
    14. 14. Пример локатора<br />id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/name:mainPanel/className:HBox,numChildren:2,getChildAt(0).className:PropertyStatusIndicatorPanel,getChildAt(1).getChildAt(0).getChildAt(0).text:SKUs/styleName:defaultPropertyLabel<br />id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/name:mainPanel/className:HBox,numChildren:2,getChildAt(0).className:PropertyStatusIndicatorPanel,getChildAt(1).getChildAt(0).getChildAt(0).text:SKUs/styleName:defaultPropertyLabel<br />id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/name:mainPanel/className:HBox,numChildren:2,getChildAt(0).className:PropertyStatusIndicatorPanel,getChildAt(1).getChildAt(0).getChildAt(0).text:SKUs/styleName:defaultPropertyLabel<br />id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/name:mainPanel/className:HBox,numChildren:2,getChildAt(0).className:PropertyStatusIndicatorPanel,getChildAt(1).getChildAt(0).getChildAt(0).text:SKUs/styleName:defaultPropertyLabel<br />
    15. 15. Структура фреймворка<br />Соотношение: <br />класс из Flex’a↔класс из Java-фреймворка<br />
    16. 16. Структура фреймворка<br />Java-класс инициализируется:<br />своим локатором<br />локатором контейнера<br />
    17. 17. Структура фреймворка<br />«Склейка» локаторов на уровне базового конструктора<br />
    18. 18. Структура фреймворка - синхронизация<br />При обращении к Java-объекту – ждём соответствующего объекта на UI<br />Синхронизации нет???<br />
    19. 19. Tips&Tricks – FlexSpy<br />Особенности:<br />Запускается внутри флеш-объекта (может вызывать побочные эффекты)<br />Лучше добавить его вызов на какую-нибудь комбинацию клавиш<br />
    20. 20. FlexSpy<br />
    21. 21. Обнаружение свойств объектов FlashInspector<br />Плагин к Firefox<br />Требует:<br />Установки Firebug<br />Debug-версию FlashPlayer’а<br />FlashFirebug – другой аналог<br />
    22. 22. Сложности<br />Альтернативная разработка <br />Selenium Flex API своими силами<br />Улучшена система локаторов<br />Исправлено несколько дефектов<br />Разработаны методы для работы с DataGrid’ами<br />Расширено количество вызываемых событий<br />Надеемся скоро это внести в виде своей доли в проект sfapi<br />
    23. 23. Сложности<br />«Нативные» нажатия на кнопки – например для закачивания/скачивания файлов<br />Решение: AutoIT<br />Создание выполняемых exe-файлов<br />Использование DLL через JNA<br />
    24. 24. Интеграция с существующим кодом на QTP<br />Цель: выполнение действий во Flex-еиз QTP с помощью существующего Java-кода<br />Алгоритм:<br />Запуск браузера из Selenium’a<br />Сохранение сессии<br />Работа с отрытым браузером из QTP<br />Вызов отдельных java-процессов с передачей в них сессии<br />
    25. 25. Поддержка WebDriver (Selenium 2)<br />Браузер<br />Код тест-кейса (С#, Java, Python, Ruby и другое)<br />WebDriver API<br />JavaScript evaluation<br />ExternalInterface<br />Тестируемое приложение<br />Flex<br />
    26. 26. Результаты<br />~400k строк кода<br />~4500 java-классов (~3500 автоматизированных тест кейсов)<br />Около 5 суток работы тестов<br />Расширяемое решение<br />
    27. 27. Вопросы<br />

    ×