t.me/atinfo_chat Telegram группа по автоматизации тестирования

Тестирование Qt Apps: Squish vs TestComplete


(bncom) #1

Имеется в наличие приложение, написанное на Qt (4.8).

Встал вопрос о выборе инструмента для автоматизации тестирования (в данный момент интересует только Record/Play с возможностью модификации записанного кода под свои нужды).

Вроде, TestComplete более-менее справляется с Qt. Вчера набрел еще на очень интересную программу - Squish, которая тоже умеет тестировать Qt-приложения.

Какую из них Вы бы могли посоветовать? (можно также написать + и - )

 


(Mykhailo Poliarush) #2

к сожалению, порекомендовать что-то из личного опыта не могу, так как не использовал Squish

но, Squish может быть лучше потому, что разработчики оригинально разрабатывали инструмент для Qt

потому, там поддержка может быть лушче.

хотя, если у вас уже есть TestComplete и вы не замечали проблем с автоматизацией Qt, то и Squish вам не нужен (хотя там можно писать на python, а это прикольно :) )

 

ну все равно, рекомендую вам выписать маленький список требований к автоматизации ваших Qt приложений и сделать однотипные тесты на разных инструментах и сравнить результаты

это более правильный подход, даже если вам что-то рекомендуют, так как такие рекомендации могут работать для кого-то, а для вас нет.


(Artem) #3

Интересно, что ТС выбрал?

Squish/TestComplete

?


(Mykhailo Poliarush) #4

в чем заключается вопрос? :)


(Artem) #5

Интересен выбор ТС :) ЧТо он в итоге выбрал, так как тоже стоит задача в скором времени тестить приложение на QT


(Mykhailo Poliarush) #6

ок, понял, ну будем ждать ответа

мне тоже кстати интересно узнать, куда все таки пал выбор и почему :) 


(apetrovskiy) #7

У вас, случаем, не виндовое Qt-приложение? Потому что тогда это можно сделать на UIAutomation совершенно бесплатно (только что проверил на VLC player - да-да, том самом VLC, который официально прославлялся нокией как Qt4-приложение с _миллиардом_ даунлоадов).

Вот так можно открыть файл и он автоматически проиграется:
[string]$fileToPlay = "C:\1\1.avi";
Get-UIAWindow -n VLC*Media*pl* | Get-UIAMenuItem -Name Med* | Invoke-UIAControlClick | Get-UIAMenuItem -Name Open*File* | Invoke-UIAMenuItemClick;
Get-UIAWindow -pn vlc | ?{ ($_ | Read-UIAControlName) -match "Select one" } | Get-UIAEdit -Name File*name* | Set-UIAEditText -Text $fileToPlay;
Get-UIAButton -Name Open | Invoke-UIAButtonClick;
 
Проверил на VLC Portable 1.0.2 (2009 года :). Заметил, что кнопки проигрывания не подготовлены к автоматизации - ни Name, ни AutomationId.
Посмотрел на Qt Creator 2.4.1 (Qt 4.7.4) - тут похуже, примерно как в хроме: серединка монолитная, кнопки и менюшки по краям доступны.
В общем, если вам доступен исходный код или над вашими программистами можно поработать, вполне возможно, что вам хватит UIAutomation. Есть генерилка кода, даже две (не идеал, но всё же). Да и исследовать контролы можно прямо с комманд-лайна.
 
 

(levaal) #8

Александр, я немного не по теме спрошу - код, который вы тут привели, написан на UIAutomation PowerShell extenstion (http://uiautomation.codeplex.com/)? 

А почему вы решили именно powershell? Оно предоставляет только возможность автоматизировать действия (процессы)  или позволяет автоматизировать функциональное тестирование (например, делать ассерты и пассить/фейлить тест)?

 

Потому что до сих пор в контексте UIAutomation сталкивался лишь с Microsoft Coded UI Test и White - насколько я понимаю, оба инструмента являются надстройками над UIAutomation.

 

>> Есть генерилка кода, даже две (не идеал, но всё же). Да и исследовать контролы можно прямо с комманд-лайна.

можно, пожалуйста, названия (ссылки) генерилок и того, как можно исследовать контролы из комманд-лайна ?

 

Спасибо.


(apetrovskiy) #9

Да, это они. Почему на пауэршелл? Два фактора были в начале: работаем в конторе с проектами под Active Directory (даже если это unix/linux), в нескольких отделах есть опыт работы с паауэршелл (к примеру, PowerGUI - продукт нашего отдела. PowerSlim разработан в дальнем конце коридора.)

С другой стороны, пауэршелл - это дотнет (можно даже скомпилировать в библиотечку или экзешник, если это зачем-то надо). Всё, даже win32 api можно дёрнуть из пауэршелла. Можно даже куски C# кода вставлять как строчные константы.

При этом найти и поправить баг можно без студио, и даже без шарпдевелоп (даже его лень ведь всюду ставить), прямо на машинке, где баг найден? пауэршелл.

Как обучить новичков б/о программирования - дать в руки утилиты (командлеты же как утилиты).

Как набирать меньше? Так автодополнение везде, и в параметрах тоже.

как найти то, что надо? Get-Command -module uia* *button*

Как сделать качественный код - написать его в мелких порциях (командлеты подойдут :) и протестирвоать поштучно.

Как доступиться до всех современных сервисов майкрософт (эксчендж, шарпойнт, облако, ...) - пауэршелл.

Как сделать что-то в UI и тут же проверить в сети/процессах/файлах - пауэршелл (UIAutomation).

Остановить сервис и посмотреть автотестом в гуй (как приложение это восприняло) - да тоже пауэршелл (UIAutomation).

как выполнять код во всём домене и какэ то включить - паэршелл и групповые политики.

Вам не придётся ставить питон (сама по себе хорошая штука) на кучу машин, зато пауэршелл в новых ОС вообще идёт "из коробки". (UIAutomation пока не поддерживает Remoting, сейчас это можно сделать через powerslim).

========================================================================================

В комплекте идёт TMX.dll - тест-резалты можно генерить даже автоматически. А можно вручную:

if (Get-UIAWindow -Name calc* | Get-UIAButton -n 10) {

Close-TMXTestResult -Name "Eventually, Microsoft has added the 10 button";

}

или даже так

Get-UIAWindow -Name calc* | Get-UIAButton -n 1 -TestPassed -TestResultName "button 1 is here";

Т.е., можно фейлить тест по отсутствию контрола (terminating error), а можно логикой кода (есть, кстати, PSTest и PSExpect - они похожи на юнит-тесты).

========================================================================================

Так в составе архива есть генерилки:

UIAutomationSpy (генерит код для текущего контрола и амшет его в одну из вкладок, но без событий)

Start-UIARecorder (может поймать некоторые события)

обе генерилки не ахти, конечно, требуют допиливания, но помощь оказывают

========================================================================================

прямо из комманд-лайна или даже из теста под отладкой:

посмотреть имена контролов вашего окна:

Get-UIAWindow -Name calc* | Get-UIAControlDescendants | Read-UIAControlName

(Get-UIAWindow -Name calc* | Get-UIAButton -n 1).Current - выдаст проперти

========================================================================================)

кто на ком - вопрос сложный :)

white, кажется, на Win32

MS UI Automation вообще несколько: 1) классика из дотнета 2) сишная классика (больше пропертей, как в MSAA) 3) UIACOM wrapper - они на него сейчас переходят помаленьку, но он не поддерживает кучу паттернов.

Вот что говорит автор: "The next question would be, "OK, but why doesn't the COM API expose that pattern for that control?"  The managed client API for UI Automation had a number of workarounds, some of them unstable, to try to cope with WinForms and Win32 common controls.  (Another example: the client API tries to show the children of a combo box when the combo box is collapsed, but since the owner of the combo box can change the children dynamically when the combo box is opened, this collapsed children list is often inaccurate.)  The COM API for UIA doesn't reproduce most of these workarounds."

Coded UI поверх рэппера, возможно, и обычной MS UI Automation, и ещё они поддерживают всяких там инфраджистикс (в студии столько файлов, что не поймёшь сходу, что там что поддерживает :))

UIAutomation powershell - поверх .NET UI Automation + Win32 API.

Не пора ли завести пауэршелльный раздел на форуме? :) В рамках одного треда и не распишешь :)


(apetrovskiy) #10

Сейчас у нас очень солидная часть новой большой фичи продукта (консоль mmc, куча визардов, стардартные и не только диалоги поиска в Active Directory) автоматизировано на пауэршелл. 2700+ тест-кейсов и время выполнения где-то более 3-х часов.

Так что за полгода UIAutomation достиг того же, что тесткомлит (они не так давно стали через Automation поддерживать многие контролы. Раньше, года два или три назад, часто бессовестно кликали по смещению, если контролы не имели хэндла) достиг за почти десять лет.


(apetrovskiy) #11

Если вам интересно вдруг, как сделать юнит-тесты пауэршельного кода на NUnit (форму покликать, или браузер), посмотрите в проектах UIAutomationTest, SePSXTest, TMXTest на http://stsps.codeplex.com

Если вам интересно сделать свой фреймворк для среды пауэршелл, чтобы можно было генерить тест-резалты из кода, обращайтесь - но тут будет многА букв.


(levaal) #12

Спасибо за развернутый ответ!