34
Автоматизация Flex-приложений с помощью Selenium RC Игорь Хрол

автоматизация Flex приложений с помощью selenium rc

Embed Size (px)

Citation preview

Page 1: автоматизация Flex приложений с помощью selenium rc

Автоматизация Flex-приложений с помощью Selenium RC

Игорь Хрол

Page 2: автоматизация Flex приложений с помощью selenium rc

Немного о себе

• Игорь Хрол• Специализируюсь на

автоматизации тестирования с 2006 года

• Инструменты:– Selenium, HP QTP, Watir,

TestComplete, Jmeter• E-mail: [email protected]

Page 3: автоматизация Flex приложений с помощью selenium rc

Что будет в докладе?

• Немного о проекте• Какой стоял выбор для автоматизации

Flex’a?• Сравнение инструментов• Выбранное решение и архитектура• Tips&Tricks• Текущие результаты работы

Page 4: автоматизация Flex приложений с помощью selenium rc

О проекте

• www.atg.com (с января 2011-го – часть Oracle)

• Середина 2009-го – вся UI-автоматизация на HP QTP

• Конец 2009-го – первые версии приложения с Flex и решение начать автоматизацию на Selenium

Page 5: автоматизация Flex приложений с помощью selenium rc

Варианты Flex-автоматизации

• HP QTP + Flex QTP add-in

• Selenium-Flex API + Selenium RC + Java

• FunFX + Watir + Ruby

Page 6: автоматизация Flex приложений с помощью selenium rc

Результаты оценки – скорость работы (JSP)

QTP Selenium Watir0

10

20

30

40

50

60

JSP - IEJSP - Firefox

Время выполнения сценария в минутах

Цикличное создание-удаление 100 сущностей в JSP

Page 7: автоматизация Flex приложений с помощью selenium rc

Результаты оценки – скорость работы (Flex)

QTP Selenium0

5

10

15

20

25

30

Flex - IEFlex - Firefox

QTP не поддерживает Firefox с Flex

Цикличное создание-удаление 100 сущностей вo Flex

Время выполнения сценария в минутах

Page 8: автоматизация Flex приложений с помощью selenium rc

Результаты оценки – скорость работы (Flex)

QTP Selenium0

50

100

150

200

250

300

Flex - IEFlex - Firefox

QTP не поддерживает Firefox с Flex

Цикличная навигация по Flex – 100 раз

Время выполнения сценария в минутах

Page 9: автоматизация Flex приложений с помощью selenium rc

Недостатки QTP• Нестабильная работа• Распознавание UI-объектов с учётом

практически всей иерархии объектов• Отсутствие удобного языка и средств

разработки

Page 10: автоматизация Flex приложений с помощью selenium rc

Схема работы Selenium Flex API

Браузер

Selenium Core

Тестируемое приложение

Selenium RCHTTP

Код тест-кейса (С#, Java, Python, Ruby и

другое)

Flex

ExternalInterface

user-extensions.js

Page 11: автоматизация Flex приложений с помощью selenium rc

Поддержка различных браузеров

• Нужна ли вообще?– Различные версии IE

– Google Chrome, Safari, Opera…– Ну и конечно Firefox

Page 12: автоматизация Flex приложений с помощью selenium rc

Поддержка различных браузеров – модификации для Firefox

Браузер

Selenium Core

Тестируемое приложение

Selenium RC

Flex

ExternalInterface

user-extensions.js

Bridge

HTTP

Код тест-кейса (С#, Java,

Python, Ruby и другое)

Page 13: автоматизация Flex приложений с помощью selenium rc

Структура фреймворка - локаторы• Подобие ХPath, но не совсем• Общая структура:– property:value– property1:value1,property2:value2– property1:value1/property2:value2– property1.subproperty11:value11,property2:value

2/property3.subproperty31:value31• Примеры…

Page 14: автоматизация Flex приложений с помощью selenium rc

Пример локатора

id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/className:BrowsePanel/id:ancestorNavBar/id:dropdownButtonArea/id:nodeText

Page 15: автоматизация Flex приложений с помощью selenium rc

Пример локатора

id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/className:BrowsePanel/id:ancestorNavBar/id:dropdownButtonArea/id:nodeText

Page 16: автоматизация Flex приложений с помощью selenium rc

Пример локатора

id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/className:BrowsePanel/id:ancestorNavBar/id:dropdownButtonArea/id:nodeText

Page 17: автоматизация Flex приложений с помощью selenium rc

Пример локатора

id:merchandising.manageCommerceAssets_0,root.numModalWindows:0/className:BrowsePanel/id:ancestorNavBar/id:dropdownButtonArea/id:nodeText

Page 18: автоматизация Flex приложений с помощью selenium rc

Пример локатора

id:merchandising.manageCommerceAssets0,root.numModalWindows:0/className:BrowsePanel/id:ancestorNavBar/id:dropdownButtonArea/id:nodeText

Page 19: автоматизация Flex приложений с помощью selenium rc

Пример локатора

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

Page 20: автоматизация Flex приложений с помощью selenium rc

Пример локатора

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

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

Page 21: автоматизация Flex приложений с помощью selenium rc

Пример локатора

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

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

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

Page 22: автоматизация Flex приложений с помощью selenium rc

Пример локатора

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

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

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

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

Page 23: автоматизация Flex приложений с помощью selenium rc

Структура фреймворка

• Соотношение: – класс из Flex’a ↔класс из Java-фреймворка

Page 24: автоматизация Flex приложений с помощью selenium rc

Структура фреймворка• Java-класс инициализируется:– своим локатором– локатором контейнера

Page 25: автоматизация Flex приложений с помощью selenium rc

Структура фреймворка

• «Склейка» локаторов на уровне базового конструктора

Page 26: автоматизация Flex приложений с помощью selenium rc

Синхронизации нет???

Структура фреймворка - синхронизация

• При обращении к Java-объекту – ждём соответствующего объекта на UI

Page 27: автоматизация Flex приложений с помощью selenium rc

Tips&Tricks – FlexSpy

• Особенности:– Запускается внутри флеш-объекта (может

вызывать побочные эффекты)– Лучше добавить его вызов на какую-нибудь

комбинацию клавиш

Page 28: автоматизация Flex приложений с помощью selenium rc

FlexSpy

Page 29: автоматизация Flex приложений с помощью selenium rc

Обнаружение свойств объектов FlashInspector

• Плагин к Firefox• Требует:– Установки Firebug– Debug-версию FlashPlayer’а

Page 30: автоматизация Flex приложений с помощью selenium rc

Сложности

• Альтернативная разработка Selenium Flex API своими силами– Улучшена система локаторов– Исправлено несколько дефектов– Разработаны методы для работы с

DataGrid’ами– Расширено количество вызываемых событий

• Надеемся скоро это внести в виде своей доли в проект sfapi

Page 31: автоматизация Flex приложений с помощью selenium rc

Сложности

• «Нативные» нажатия на кнопки – например для закачивания/скачивания файлов

Решение: AutoIT• Создание выполняемых exe-файлов• Использование DLL через JNA

Page 32: автоматизация Flex приложений с помощью selenium rc

Интеграция с существующим кодом на QTP

• Цель: выполнение действий во Flex-е из QTP с помощью существующего Java-кода

• Алгоритм:– Запуск браузера из Selenium’a– Сохранение сессии– Работа с отрытым браузером из QTP– Вызов отдельных java-процессов с передачей в

них сессии

Page 33: автоматизация Flex приложений с помощью selenium rc

Результаты

• ~400k строк кода• ~4500 java-классов (~3500

автоматизированных тест кейсов)

• Около 5 суток работы тестов

• Расширяемое решение

Page 34: автоматизация Flex приложений с помощью selenium rc

Вопросы