Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Какой модуль поддерживает тестирование GUI на Windows и на MacOS

windows
gui
os-x
python
Теги: #<Tag:0x00007f7b618f8570> #<Tag:0x00007f7b618f8430> #<Tag:0x00007f7b618f8250> #<Tag:0x00007f7b618f8110>

(Leonid Kolmanovsky) #1

Уважаемые гуру, так сложилась моя жизнь, что до сего дня все время работал с встроенным софтом. Писал на Python и был счастлив. Но сегодня передо мной встала во всей своей красе проблемма, как автоматизировать приложение, которое существует под Windows и под OSX. Понятное дело, что с API частью особых проблем не возникло. Но вот что касается GUI… Попрбовал UIsoup и LDTP. Первый, как выяснилось, не хочет сосуществовать с 64-битным Python. И если в мире Windows можно пойти на это и поставить 32-битный Python на 64-битную систему, то вот в яблочном мире с этим хуже. LDTP тоже не доставил удовольствия. В своей OSX ипостаси (atomac) он не находит окно по AppBundleID, которое только что по этому самому AppBundleId открыл. Не говоря уже о том, что тормозят оба модуля безбожно.

Подскажите, может у кого есть удачный опыт с этими или какими иными модулями. Или инструмент какаой, желательно хоть как-то интегрируемый с Python. Ну в крайнем случае придумаем как интегрировать, но важно, чтобы можно было работать с GUI на Windows и MacOS.

Заранее спасибо.


(Mykhailo Poliarush) #2

поищите разные инструменты тут https://github.com/atinfo/awesome-test-automation/blob/master/python-test-automation.md, но вообще можете попробовать https://github.com/asweigart/pyautogui


(Leonid Kolmanovsky) #3

Спасибо за совет. Попробую и поделюсь наблюдениями.


(karkadil) #4

А нужно именно бесплатное решение?
А то мы у себя для тестирования Qt-приложения под Win и Linux используем Squish и вполне счастливы, разница минимальна. Squish же работает и под MacOS, правда я лично не пробовал.


(Leonid Kolmanovsky) #5

Ну бесплатное решение - это, конечно, же лучше. Но работоспособное платное вполне приемлемо. Проблемма пока в том, что большинство того, что мы пробовали имеет неприемлимый список ограничений или ведет себя странно. UIsoup не работает с 64 битным Python, находящийся сейчас в стадии пробы PyAutoGUI, похоже, не умеет находить окна. По крайней мере в документации я не нашел ничего относящегося к этому. Да и в планах на будущее, кажется, видел, что работу с окнами надо еще делать. Давайте попробуем Squish. Может быть и мы будем счастливы. Спасибо!


(karkadil) #6

Если что-то не получится - обязательно спросите саппорт. Они нам, например, делают даже кастомные билды Сквиша с более свежей версией питона, так что вполне возможно, что и ваша проблема будет решена.


(Leonid Kolmanovsky) #7

Еще раз спасибо. Сейчас пройдет очередной аврал и буду пробовать.


#8

Можно зайти со стороны Selenium-based инструментов. Для автоматизации GUI настольных приложений под Windows можно использовать https://github.com/2gis/Winium.Desktop, а под OS X https://github.com/appium/appium-for-mac.

Оба инструмента реализуют единый интерфейс JsonWire Protocol (aka Selenium WebDriver Protocol), т.е. API для написания тестов будет одинаковым. При этом, т.к. в Selenium исползьуется клиент-серверная архитектура, то тесты (клиент) можно писать на любом языке, в том числе и на python.

Но я лично Appium for Mac не использовал и не знаю на сколько он готов к серьезному использованию, но он, как и Winium, полностью open source, т.е. можно подпилить, если надо.


(Vasily Ryabov) #10

Это правда. Системы поиска окон и контролов в PyAutoGUI нет.
На чём сделан GUI - это важная информация. Например, с 64-битным питоном умеет работать pywinauto, но он пока перемалывает только нативные GUI (этой зимой подключим UI Automation API, и будет больше приложений покрыто, на линуксах тоже кое-что ковыряем, но нескоро ещё). До OS X руки дойдут года через полтора, не раньше. Если только эксперт по OS X не найдётся.

QT - вообще отдельная песня. Тут без Squish, видимо, не обойтись. Из бесплатных знаю только funq.


(Stan) #11

@Vasily_Ryabov обойтись :slight_smile: Можно все сделать стандартными возможностями QT/QML : http://doc.qt.io/qt-5/qml-qttest-testcase.html

Стартовать с примеров можно из ubuntu-sdk (в свое время очень сильно мне помогло): https://developer.ubuntu.com/en/apps/qml/tutorials/qml-integration-testing/
Либо взять пример интегрейшн тестов из вебкита, например: http://www.opensource.apple.com/source/WebKit2/WebKit2-7536.28.10/UIProcess/API/qt/tests/qmltests/

Squish просто красивая обертка вокруг всего этого. Более того можно использовать тот же питон - https://github.com/pyqt/python-qt5/blob/master/PyQt5/qml/QtTest/TestCase.qml
Или устаревший (но все таки работающий) tDriver - https://rubygems.org/gems/testability-driver/versions/1.5.4


(Vasily Ryabov) #12

Оу, это интересно, спасибо за прицельные ссылки. Не совсем понял, как можно дёргать QT-шный GUI именно из питоновского скрипта, без QML файла. А ещё, я так понял, установка PyQT для всех этих возможностей обязательна? Хотелось бы понять минимальный джентльменский набор для автоматизатора QT-шного GUI приложения при полном отсутствии сорцов. И возможно ли это без установленного QT в принципе?

P.S. Да, мой QT опыт == None. :slight_smile:


(Stan) #13

Очень возможно, в QT очень легко выцепить все кастомные элементы, если конечно приложение не было как-то жестоко обфусцировано. Лично по моему опыту - Squish оверхэд, монстр аля HP QuickTest, который и маштабировать достаточно сложно, да и специфики использования слишком много. Вообще с десктоп приложениями часто все очень и очень плохо, доля их падает, есть слишком много разной платформенной специфики - и тестировать, тем более автоматически их никто не хочет, большинство просто делают это руками, либо пишут свои собственные фреймворки-биндинги, если продукт этого действительно требует.


(Vasily Ryabov) #14

А какие-нибудь примеры “выцепления” есть? Или может руководства по добыче данных об элементах?