Identifier
Deutsche Bank
WPF UI testing in Deutsche Bank
WPFA
Амир Ромашкин,
amir.romashkin@db.com
Автоматизированное тестирование
Короткие релизы
Сложные сценарии становятся легче
CI защищает от багов
Разработка и поддержка тестов
WPFA: внутренний продукт
• Рекомендован для WPF в Дойче Банке
• Доказанная эффективность
•  2.5 года
•  10 проектов
•  Десятки тысяч автотестов
• Активно развивается
ü  WPFA core
Ø  BDD via SpecFlow and ANTLR
.NET UI
Automation
library
QTP
Ranorex
White Coded UI
TestComplete
…
WPFA
Мир вокруг нас
.NET UI Automation: технология
• Microsoft (c)
• Различные технологии и платформы
• MSDN и community
Но мы создали свою!
Test
execution
.NET UI Automation: стандартное выполнение
Application process
Window
StackPanel
Border
TextBox
Label
Window element
Label
element
TextBox
element
Real visual tree
Automation
element tree
Access to visual
elements
.NET UI
Automation
Test runner process
WPFA: почти Snoop
Test method call interception
Injection into application via
ManagedInjector.dll
Elements manipulations via
InputSimulator.dll
AssertionExceptions propagated back
Test runner process Application process
WPFA: простейшая концепция
• Пишем простой юнит-тест.
• Выполняем его на UI потоке процесса приложения.
• При помощи WPF работаем с визуальным деревом.
WPFA: реализация концепции
• PoC: github.com/amirkaromashkin/wpfa
• Перехватим вызов конструктора при помощи Proxy
• Выполним DLL-injection в приложение как Snoop
• Наладим изнутри приложения связь с NUnit
• Будем маршаллировать вызовы методов в приложение
• Внутри процесса мы - хозяева:
•  Dispatcher.PushFrame поможет с ожиданием наступления
событий.
•  InputSimulator будет управлять мышкой и клавиатурой.
WPFA: полный доступ к приложению
"   Тестирование не UI-ых элементов(ViewModel, HTTP
запросы)
"   Создание Mock-ов прямо в тестах (Взаимодействие с
сервером, базой данных)
"   Всегда актуальное визуальное дерево
"   Полная поддержка кастомных контролов
"   Дебаг и диагностика (RoutedEvents, DataContext)
"   Может неузнаваемо изменить приложение
" ApplicationIdle зарезервирован
"   Модальные окна и другие PushFrame – отдельные
“приседания”
Заключение
• Полноценный WPFA нельзя вывести в open-source L
• Концепция реализуется просто
• Решение расширяемо при помощи других фреймворков
• Полный контроль это круто!
Контакты
•  Email: amir.romashkin@db.com
•  PoC on GitHub : github.com/amirkaromashkin/wpfa
Возможные фичи
• Модальные окна
•  Отдельный поток слушает открывающиеся новые модальные окна
•  Предрегистрируем обработчик модального окна в тесте
• Мониторинг зависания приложения

UI тестирование WPF приложений в Дойче Банке

  • 1.
    Identifier Deutsche Bank WPF UItesting in Deutsche Bank WPFA Амир Ромашкин, amir.romashkin@db.com
  • 2.
    Автоматизированное тестирование Короткие релизы Сложныесценарии становятся легче CI защищает от багов Разработка и поддержка тестов
  • 3.
    WPFA: внутренний продукт • Рекомендовандля WPF в Дойче Банке • Доказанная эффективность •  2.5 года •  10 проектов •  Десятки тысяч автотестов • Активно развивается ü  WPFA core Ø  BDD via SpecFlow and ANTLR
  • 4.
    .NET UI Automation library QTP Ranorex White CodedUI TestComplete … WPFA Мир вокруг нас
  • 5.
    .NET UI Automation:технология • Microsoft (c) • Различные технологии и платформы • MSDN и community Но мы создали свою!
  • 6.
    Test execution .NET UI Automation:стандартное выполнение Application process Window StackPanel Border TextBox Label Window element Label element TextBox element Real visual tree Automation element tree Access to visual elements .NET UI Automation Test runner process
  • 7.
    WPFA: почти Snoop Testmethod call interception Injection into application via ManagedInjector.dll Elements manipulations via InputSimulator.dll AssertionExceptions propagated back Test runner process Application process
  • 8.
    WPFA: простейшая концепция • Пишемпростой юнит-тест. • Выполняем его на UI потоке процесса приложения. • При помощи WPF работаем с визуальным деревом.
  • 9.
    WPFA: реализация концепции • PoC:github.com/amirkaromashkin/wpfa • Перехватим вызов конструктора при помощи Proxy • Выполним DLL-injection в приложение как Snoop • Наладим изнутри приложения связь с NUnit • Будем маршаллировать вызовы методов в приложение • Внутри процесса мы - хозяева: •  Dispatcher.PushFrame поможет с ожиданием наступления событий. •  InputSimulator будет управлять мышкой и клавиатурой.
  • 10.
    WPFA: полный доступк приложению "   Тестирование не UI-ых элементов(ViewModel, HTTP запросы) "   Создание Mock-ов прямо в тестах (Взаимодействие с сервером, базой данных) "   Всегда актуальное визуальное дерево "   Полная поддержка кастомных контролов "   Дебаг и диагностика (RoutedEvents, DataContext) "   Может неузнаваемо изменить приложение " ApplicationIdle зарезервирован "   Модальные окна и другие PushFrame – отдельные “приседания”
  • 11.
    Заключение • Полноценный WPFA нельзявывести в open-source L • Концепция реализуется просто • Решение расширяемо при помощи других фреймворков • Полный контроль это круто! Контакты •  Email: amir.romashkin@db.com •  PoC on GitHub : github.com/amirkaromashkin/wpfa
  • 13.
    Возможные фичи • Модальные окна • Отдельный поток слушает открывающиеся новые модальные окна •  Предрегистрируем обработчик модального окна в тесте • Мониторинг зависания приложения