Как протестировать 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:

  1. Xvfb :99
  2. DISPLAY=:99 mvn clean install
Другие вопросы по тегам