4 безкоштовних способи автоматизації GUI-тестування QT-додатків під Windows
Тема автоматизації тестування користувальницьких інтерфейсів стає актуальною, як ніколи. Багато компаній займаються розробкою продуктів, які не сильно змінюються від версії до версії. На кожній ітерації додається кілька нових функцій, виправляється ряд знайдених раніше дефектів. Але при випуску чергового релізу вони стикаються з важливою проблемою - перестають працювати функції програми, які завжди були стабільні.
На поточний момент тема автоматизації тестування користувальницьких інтерфейсів стає актуальною, як ніколи. Багато компаній займаються розробкою продуктів, які не сильно змінюються від версії до версії. На кожній ітерації додається кілька нових функцій, виправляється ряд знайдених раніше дефектів. Але при випуску чергового релізу вони стикаються з важливою проблемою - перестають працювати функції програми, які завжди були стабільні. Оскільки проведення повного ручного тестування на кожній ітерації є дуже трудомістким завданням, саме для таких компаній найкращим варіантом є автоматизація тестування користувальницького інтерфейсу.
У даній статті ми розглянемо безкоштовні інструменти для автоматизації тестування Windows-додатків, розроблених з використанням бібліотек QT. Нижче наведено список можливих інструментів, які допоможуть підвищити якість вашого продукту.
I. Фреймворк QTestLib
Для початку розглянемо фреймворк QTestLib, який відповідає за модульне тестування в QT. На жаль, для тестування користувальницького інтерфейсу він надає набагато менше можливостей, ніж для написання unit-тестів. Єдиною функцією для GUI-тестування в QTestLib є симуляція миші і клавіатури.
C точки зору автоматизації тестування, такий варіант далеко не самий оптимальний. При його використанні відбувається змішання unit-тестів (що розробляються програмістами) та GUI-тестів (що розробляються тестувальниками). До того ж, важливо не тільки клікнути по тій чи іншій координаті вікна, але і отримати властивості контролів і виконати патерни, що реалізуються цим контролом. Тому зупинятися на ньому не будемо, а перейдемо до більш функціональним інструментам. Бажаючі дізнатися про фреймворку QTestLib більше, можуть ознайомитися з главами 3 і 4 підручники по QTestLib.
II. UI Automation
UI Automation - це технологія, яка використовує для доступу до елементів управління інтерфейсом механізм Microsoft Active Accessibility (MSAA). З'явилася вона досить давно, разом з виходом Windows Presentation Foundation. Багато платні рішення (наприклад, Ranorex) використовують UI Automation для доступу до контролю.
Кожен елемент представляється у вигляді об'єкта AutomationElement, в якому визначено його основні ідентифікатори. Деякі контроли можуть реалізовувати так звані патерни. Наприклад, патерн ExpandCollapsePattern служить для згортання і розгортання елемента меню. Для отримання підтримуваних патернів використовується метод GetSupportedPatterns. Для пошуку контрола з заданим значенням властивості використовується клас PropertyCondition.
При написанні тестів ідентифікатори контролів, їх властивості та можливі патерни зручно дивитися за допомогою утиліти UISpy.
Отже, як же використовувати UI Automation в QT-додатках. Необхідно зібрати додаток з підтримкою accessibility - додати плагін QT_dirpluginsaccessible. Детальніше про цю операцію можна почитати тут. Після цього з'являється можливість використання UI Automation.
Для кращого розуміння наведемо приклад простого тесту, який запускає додаток, розгортає меню «File» і натискає на «Exit»:
Окремо варто відзначити, що якщо для розробки ви використовуєте Visual Studio версії Professional, Premium або Ultimate, то вам стає доступний такий інструмент, як Coded UI Test. У нього включений Test Recorder, який записує дії користувача і автоматично генерує тести з використанням UI Automation. Але оскільки зазначені вище версії Visual Studio коштують чималих грошей, то докладно в рамках даної статті розглядати Coded UI Test ми не будемо.
III. фреймворк White
Фреймворк White вдає із себе розширення UI Automation, яке робить доступ до контролю і їх властивостями зручнішим. Знайти його ви можете тут. Всі особливості, перераховані для UI Automation, стосуються і White.
Щоб зрозуміти переваги при його використанні, переробимо початковий приклад з використанням цього фреймворка.
Як видно з прикладу, звернення до контролю і виконання дій над ними стало набагато читабельнее, а зміна тестів - простіше.
IV. PowerShell Extensions
Автоматизація тестування доступна з використанням вбудованих інструментів Windows: powershell, а також розширення UI Automation PowerShell Extensions. Знайти розширення можна тут. Цей інструмент дозволяє робити тестування більш гнучким і незалежним щодо середовища виконання. Наприклад, при конфігураційному тестуванні вам достатньо скопіювати скрипти на віртуальні машини, де вони будуть виконуватися. Ніякого додаткового ПЗ (крім UIAutomation.dll) встановлювати не треба.
Як виглядає простий скрипт автоматизації QT додатків на Powershell:
Кожен проект унікальний і не існує «найкращого» способу автоматизації тестування користувальницького інтерфейсу. При виборі необхідно відштовхуватися від таких параметрів, як бюджет проекту, навички команди тестувальників, вже використовувані інструменти. Також не слід відразу відмовлятися від платних інструментів автоматизації - можливо, ROI від їх покупки перевищить початкові очікування.