如何在无头环境中测试JavaFX 2?

时间:2012-08-30 10:06:24

标签: continuous-integration automated-tests javafx-2 headless xvfb

我正在尝试使用集成的JavaFX 2.2自动测试在Java 7u6上运行的JavaFX 2应用程序。 为此,我已将Jemmy3JemmyFX构建并集成到我的构建环境中。 在所有相关操作系统上运行简单的冒烟测试。

下一步,我想将测试作为持续部署过程的一部分运行。 由于当前的CI服务器在OpenSUSE上运行,而JavaFX没有正式支持, 我在虚拟机中安装了Ubuntu Server并安装了gtk2 为了弥补缺乏完全成熟的窗口系统,我尝试在 Xvnc Xvfb 上运行测试,但无济于事。

Xvnc 上,测试失败并带有

Prism ES2 Error - nInitialize: glXChooseFBConfig failed

而在 Xvfb 上,他们给我

Xlib:  extension "RANDR" missing on display ":10".

建议blog post安装gtk-engines-pixbuf以缓解第二个问题,但这只会更改错误消息中显示的数量。

现在,我召集了StackOverflow的JavaFX知识并询问

  • 您知道如何解决上述错误吗?
  • 您是否在(无头)CI服务器上成功运行了JavaFX 2测试或机器人交互?
  • 您是如何配置该系统以使其工作的?

2 个答案:

答案 0 :(得分:12)

我遇到了类似的问题 - 在Maven的无头环境中运行JUnit测试。

我们不使用JemmyFX。我们只有非常简单的测试,它们使用与此类似的JUnit规则: https://gist.github.com/andytill/3835914 (这是使用Platform.runLater(...)的代码所必需的)

当前版本的JavaFX(随JDK 1.7.0-21提供)似乎在Ubuntu 12.04上的Xvfb中运行而没有运行Xserver:

  1. Xvfb :99
  2. DISPLAY=:99 mvn clean install

答案 1 :(得分:6)

在JavaFX 8之前,无法支持JavaFX的(无头)CI服务器测试。

根据这些JavaFX问题跟踪记录中的信息进行回答:

  • JDK-8088651“无头玻璃工具包需要连接到Quantum和Prism单元测试”
  • JDK-8091286“量子需要无头和头脑的测试”。

2015年1月8日更新

链接的JavaFX问题跟踪记录未针对Java 8实现,并已重新分配给Java 9。

Java 8源代码目前包含一个名为Monocle的最小渲染引擎,它为JavaFX组件提供无头渲染(以及各种其他目标平台的渲染)。我从未使用过Monocle,也无法提供有关如何将其用于无头渲染的详细说明。我相信使用Monocle,你当前需要从源代码执行JavaFX的自定义构建(因为我认为Monocle通常只提供嵌入式JavaFX版本,这不是桌面Java运行时和JDK环境附带的标准JavaFX版本) 。

有关Monocle的信息,请访问JavaFX wiki

虽然无头渲染是由Monocle提供的,但我认为使用Monocle执行无头渲染并不是由Oracle正式支持(尽管我认为JavaFX的任何形式的无头渲染都不是官方支持的,所以我想如果Monocle适合你,一定要使用它)。

Monocle中的无头渲染是一种软件渲染实现,因此某些图形基元的执行速度可能比桌面环境中JavaFX的标准硬件加速操作慢。

可能还有其他方法允许JavaFX在我不知道的无头环境中运行。

如果有疑问,请在openjfx-dev mailing list上询问JavaFX开发人员。

如果您在Linux下运行,根据Jan Zarnikov的建议使用Xvfb可能是一个很好的解决方案,可能比使用Monocle更好。