UI-автоматизация тестирования запутанных (WPF-) приложений

Мне было интересно, насколько сложно запускать UI-тесты, если код был запутан (особенно в отношении WPF-приложений при использовании сред тестирования, которые обращаются к свойствам автоматизации приложения и не основаны на изображениях, как, например, Ranorex, TestStudio, TestComplete, Хлюпать,...).

Я могу только найти немного информации об этом, что подразумевает, что тестирование всегда должно быть сделано до того, как код будет запутан, но не точно, почему.

Однако можно утверждать, что тесты должны выполняться на версии, которая фактически поставляется заказчику. Also if we´re using 3rd-Party components as part of our SW, we might not have the luxury of using a not-obfuscated version.

As far as I understand UI-Automation, the goal is to expose relevant properties of the application, so that they can be used not just by testing-frameworks, but also screen-readers and the like. Therefore I can´t quite understand why there might be problems once the code is being obfuscated. The obfuscation itself shouldn´t influence the number of exposed properties at all or does it?

1 ответ

Я не могу говорить за других, но Ranorex полагается на UIA (UIAutomation), среду автоматизации и доступности для автоматизации приложений WPF.

МАУ почти никогда не страдает от запутывания. Также имейте в виду, что большинство инструментов запутывания избегают запутывания открытых членов публичных классов, что используется большинством элементов управления пользовательского интерфейса.

Единственными исключениями являются редкие случаи, когда вы явно настраиваете инструмент запутывания, чтобы запутывать строки, которые могут повлиять на UIA, такие как AutomationProperties прикрепленные свойства.

Другое довольно редкое исключение может быть связано с отражением. Если вы используете отражение (обычно плохая идея, но иногда неизбежная) для активации менее доступных областей вашего приложения, то запутывание может представлять проблему. Эту проблему легко решить, добавив несколько исключений в инструмент запутывания или запустив тесты перед запутыванием.

Теоретически, не должно иметь значения, тестируете ли вы приложение до или после того, как оно было запутано, потому что запутывание теоретически не должно влиять на логику приложения. На практике есть некоторые различия, и это может повлиять на ваши тесты, хотя и очень редко. Запутанные приложения, как правило, работают немного быстрее, а иногда запутывание искажает неожиданные или незапланированные элементы кода. Таким образом, вы должны спросить себя, хотите ли вы выполнить автоматизацию пользовательского интерфейса в приложении, которое пользователи фактически получат, и уловить проблемы запутывания, которые могут повлиять только на автоматизацию пользовательского интерфейса, или протестировать приложение перед запутыванием, чтобы убедиться в правильности поведения приложения независимо от того, какая дополнительная сборка и этапы развертывания могут быть ожидающими в конвейере. Очевидно, вам придется иметь дело с возможными последствиями любого подхода, который вы выберете.

Еще одно соображение для запуска тестов до запутывания заключается в том, что если во время выполнения тестов возникнут ошибки приложения, разработчикам будет легче отладить их. Однако, если программисты знают, как отлаживать затемненный символы (с картой кодов и т.п.), то это соображение в основном спорно.

Другие вопросы по тегам