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

  • Вы знаете, как решить вышеуказанные ошибки?
  • Вы успешно выполнили тест JavaFX 2 или взаимодействие с роботом на (безголовом) сервере CI?
  • Как вы настроили эту систему, чтобы заставить ее работать?

person Urs Reupke    schedule 30.08.2012    source источник
comment
Я предполагаю, что поддержка (безголового) тестирования сервера CI для JavaFX недоступна до JavaFX 8 (на основе эти jiras). Возможно, Сергей из команды QA JavaFX может знать больше, он иногда просматривает этот сайт Q/A.   -  person jewelsea    schedule 30.08.2012
comment
Если Сергей не появится с каким-то совершенно другим ответом, я готов принять это как факт, если вы представите его как ответ.   -  person Urs Reupke    schedule 31.08.2012


Ответы (2)


Поддержка (безголового) тестирования сервера CI для JavaFX недоступна до JavaFX 8.

Ответ на основе информации в этих записях отслеживания проблем JavaFX:

  • JDK-8088651 "Инструментарий Headless Glass необходимо подключить к модульным тестам Quantum и Prism. "
  • JDK-8091286 "Quantum нуждается в безголовых и безголовых тестах").

Обновление от 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.

person jewelsea    schedule 01.09.2012
comment
Обновленный ответ, чтобы предоставить текущую информацию, как я ее знаю. - person jewelsea; 08.01.2015
comment
Этот ответ предполагает, что Monocle доступен в качестве дополнительной зависимости. - person Greg Kopff; 13.06.2015

У меня была аналогичная проблема - запуск тестов JUnit в безголовой среде с Maven.

Мы не используем JemmyFX. У нас есть очень простые тесты, в которых используется правило JUnit, подобное этому: https://gist.github.com/andytill/3835914 (требуется для кода, использующего Platform.runLater(...))

Текущая версия JavaFX (поставляемая с JDK 1.7.0-21), похоже, работает в Xvfb на Ubuntu 12.04 без работающего X-сервера:

  1. Xvfb :99
  2. DISPLAY=:99 mvn clean install
person Jan Zarnikov    schedule 23.05.2013