Skip to content
Sergey Bronnikov edited this page Nov 13, 2020 · 3 revisions

References

Инструменты для тестирования GUI

Как выбрать инструмент для автоматизации тестирования UI.

Основные подходы к автоматизации UI (см. еще плюсы и минусы в самом низу):

Подходы в тестировании UI

Координатный метод

Хардкодим точки кликов, надеемся на удачные попадания.

  • [+] Кросс-платформенный, легко реализуемый.
  • [+] Легко сделать "record-replay" запись тестов.
  • [-] Самый нестабильный к изменению разрешения экрана, темы, шрифтов, размеров окон и т.п.
  • [-] Нужны огромные усилия на поддержку, часто проще перегенерить тесты с нуля или тестировать вручную.
  • [-] Автоматизирует только действия, для верификации и извлечения данных есть другие методы.

Стоит сказать, что координатный метод может дополнять остальные подходы. Например, для кастомной графики можно кликать по относительным координатам — обычно это достаточно надежно, особенно если учитывать длину/ширину всего элемента (тогда и разное разрешение экрана не помешает).

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

Инструмент: openhmitester

Распознавание эталонных изображений

  • [+] Кросс-платформенный
  • [+-] Относительно надежный (лучше, чем координатный метод), но всё же требует хитростей.
  • [-+] Относительно медленный, т.к. требует ресурсов CPU для алгоритмов распознавания.
  • [-] О распознавании текста (OCR), как правило, речи не идёт => нельзя достать текстовые данные. Насколько мне известно, существующие OCR решения не слишком надежны для этого типа задач, и широкого применения не имеют (welcome в комменты, если это уже не так).

Инструменты: Squish, Sikuli, Lackey (Sikuli-совместимый, на чистом Python).

Accessibility технологии

  • [+] Самый надежный метод, т.к. позволяет искать по тексту, независимо от того, как он отрисован системой или фреймворком.
  • [+] Позволяет извлекать текстовые данные => проще верифицировать результаты тестов.
  • [+] Как правило, самый быстрый, т.к. почти не расходует ресурсы CPU.
  • [-] Тяжело сделать кросс-платформенный инструмент: абсолютно все open-source библиотеки поддерживают одну-две accessibility технологии. Windows/Linux/MacOS целиком не поддерживает никто, кроме платных типа TestComplete, UFT или Squish. -[-] Не всегда такая технология в принципе доступна. Например, тестирование загрузочного экрана внутри VirtualBox'а — тут без распознавания изображений не обойтись. Но во многих классических случаях все-таки accessibility подход применим. О нем дальше и пойдет речь.

Инструменты: pywinauto, LDTP (Linux Desktop Testing Project), Dogtail. Не совсем Acessibility, но смысл примерно тот же: Autopilot, Testability, Cisco QT Webdriver.

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

Требования

  • Поддержка QT/GTK (как самых популярных), для п. 1 достаточно поддержки QT
  • Поддержка VNC для п. 1 (RDP + VNC -> риск рассинхронизации мыши)
  • Поддержка скриптовых языков (Python, Lua как уже использующиеся в наших тестах)
  • Минимальная инвазивность
  • Надежность
  • Возможность создания порта для KOS (opensource?)

Варианты, которые имеет смысл рассмотреть

Популярный продукт для автоматизации тестирования UI с помощью распознавания эталонных изображений. Утверждается, что поддерживает работу через VNC. Поддержка Python, JavaScript, Ruby, Perl or Tcl. Коммерческий инструмент, но коллеги из KICS обещали поделиться лицензией.

is a Python implementation of Sikuli script.

SikuliX automates anything you see on the screen of your desktop computer running Windows, Mac or some Linux/Unix. It uses image recognition powered by OpenCV to identify GUI components. SikuliX comes with basic text recognition (OCR) and can be used to search text in images. Для работы требует Java.

Расширение для QT, которое предоставляет интерфейс WebDriver к приложению. Возможно две опции:

  • WebDriver attaches to the running application
  • WebDriver creates the application

WebDriver - стандарт для автоматизации тестирования UI, используется для тестирования Web-приложений и UI телефонов, имеет библиотеки под разные языки и легко найти тестировщиков с опытом автоматизации с использованием WebDriver.

Инвазивность: https://github.com/cisco-open-source/qtwebdriver/wiki/User-Input-Forwarding

Стандартная библиотека для юнит-тестирования GTK.

Стандартная библиотека для юнит-тестирования QT https://doc.qt.io/qt-5/qtest-overview.html.

"record and replay"

Интеграция (источник):

at-spi.png

Dogtail is a GUI test tool and test automation framework written in Python. It uses Accessibility (A11Y1) technologies to communicate with desktop applications. A Software Assistive Technology Service Provider Interface(AT-SPI)is commonly used with Dogtail to provide accessibility. QT AT-SPI was available in 2012. And with the help of QT AT-SPI, Dogtail 0.8.0 has started supporting QT tests automation. dogtail is a GUI test tool and automation framework written in Python. It uses Accessibility (a11y) technologies to communicate with desktop applications. dogtail scripts are written in Python. AT-SPI, GNOME and GTK+ applications are supported.

Используется Canonical для тестирования Ubuntu. Есть адаптеры для QT и GTK, которые подгружаются при старте приложения и предоставляют доступ объектам QT/GTK. Есть примеры тестов на Python.

Testability Driver - Testability Driver Interface Qt SUT plugin

Популярный драйвер для тестирования QT-приложений. Но в 2012 когда Trolltech купила Nokia, то они убрали этот адаптер из репозиториев и удалили все упоминания в документации. Исходный код найти еще можно, но особенно никто уже не использует. Есть форк https://github.com/nomovok-opensource/cutedriver-agent_qt/wiki

Полезные ссылки

Clone this wiki locally