Как протестировать JavaFX 2 в автономной среде?
Я пытаюсь автоматизировать тестирование приложения JavaFX 2, работающего на Java 7u6, с интегрированным JavaFX 2.2. С этой целью я встроил и интегрировал Jemmy3 и JemmyFX в свою среду сборки. Простой тест дыма выполняется на всех соответствующих ОС.
В качестве следующего шага я хочу запустить тесты как часть процесса непрерывного развертывания. Поскольку текущий сервер CI работает на OpenSUSE, который официально не поддерживается JavaFX, я настроил установку Ubuntu Server на виртуальной машине и установил gtk2.
Чтобы исправить отсутствие полноценной оконной системы, я попытался запустить тесты на Xvnc и Xvfb, но безрезультатно.
На Xvnc тесты проваливаются с
Prism ES2 Error - nInitialize: glXChooseFBConfig failed
тогда как на Xvfb мне дают
Xlib: extension "RANDR" missing on display ":10".
Сообщение в блоге предлагается установить gtk-engines-pixbuf
чтобы облегчить вторую проблему, но это только изменило номер дисплея в сообщении об ошибке.
Теперь я вызываю знания JavaFX о Stackru и спрашиваю
- Знаете ли вы, как решить вышеуказанные ошибки?
- Вы успешно выполнили тест JavaFX 2 или взаимодействие с роботом на (безголовом) CI-сервере?
- Как вы настроили эту систему, чтобы она заработала?
2 ответа
Поддержка (безголового) тестирования CI-сервера JavaFX не доступна до JavaFX 8.
Ответ на основе информации в этих записях отслеживания ошибок JavaFX:
- JDK-8088651 " Набор инструментов Headless Glass должен быть подключен к модульным испытаниям Quantum и Prism"
- JDK-8091286 "Квант нуждается в тестах без головы и в голове").
Обновление 8 января 2015 г.
Связанные записи отслеживания проблем JavaFX не были реализованы для Java 8 и были переназначены на Java 9.
Исходный код Java 8 в настоящее время включает минимальный механизм рендеринга Monocle, который обеспечивает рендеринг без головы (и рендеринг для различных других целевых платформ) для компонентов JavaFX. Я никогда не использовал Monocle и не могу предоставить подробные инструкции о том, как использовать его для безголового рендеринга. Я полагаю, что для использования Monocle вам в настоящее время необходимо выполнить пользовательскую сборку JavaFX из исходного кода (поскольку я думаю, что Monocle обычно поставляется только во встроенных версиях JavaFX, которые не являются стандартной версией JavaFX, поставляемой с настольной средой выполнения Java и средами JDK),
Информация о Monocle доступна на вики JavaFX.
Хотя Monocle предоставляет безголовый рендеринг, я не думаю, что использование Monocle для выполнения безголового рендеринга официально поддерживается Oracle (хотя я не думаю, что безголовый рендеринг JavaFX в любой форме официально поддерживается, поэтому думаю, что Monocle работает хорошо для вас, во что бы то ни стало используйте его).
Безголовый рендеринг в Monocle является программной реализацией рендеринга, поэтому выполнение некоторых графических примитивов может быть медленнее, чем стандартное аппаратное ускорение работы JavaFX в среде рабочего стола.
Могут быть и другие способы разрешения работы JavaFX в автономной среде, о которых я не знаю.
Если вы сомневаетесь, спросите разработчиков JavaFX в списке рассылки openjfx-dev.
Если вы работаете в Linux, использование Xvfb, как подсказывает ответ Яна Зарникова, вероятно, является хорошим решением и, вероятно, предпочтительнее, чем использование Monocle.
У меня была похожая проблема - запускать тесты JUnit в автономной среде с Maven.
Мы не используем JemmyFX. У нас есть только очень простые тесты, которые используют правило JUnit, подобное этому: https://gist.github.com/andytill/3835914 (это необходимо для кода, который использует Platform.runLater(...))
Текущая версия JavaFX (поставляется с JDK 1.7.0-21), похоже, работает в Xvfb на Ubuntu 12.04 без работающего Xserver:
Xvfb :99
DISPLAY=:99 mvn clean install