11

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

作为下一步,我想在持续部署过程中运行测试。由于目前的 CI 服务器运行在 OpenSUSE 上,JavaFX 并没有官方支持,所以我在虚拟机中设置了一个 Ubuntu Server 安装,并安装了 gtk2。
为了弥补缺乏完全成熟的窗口系统的问题,我尝试在XvncXvfb上运行测试,但无济于事。

Xvnc上,测试失败

Prism ES2 Error - nInitialize: glXChooseFBConfig failed

而在Xvfb上,他们给了我

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

一篇文建议安装gtk-engines-pixbuf以缓解第二个问题,但这只是改变了错误消息中的显示数量。

现在,我召唤StackOverflow的JavaFX知识并问

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

2 回答 2

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
于 2013-05-23T10:52:59.687 回答
7

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

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

  • JDK-8088651 “Headless Glass 工具包需要连接到 Quantum 和 Prism 单元测试”
  • JDK-8091286 “Quantum 需要无头和有头测试”)。

2015 年 1 月 8 日更新

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

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

JavaFX wiki上提供了有关 Monocle 的信息。

虽然,无头渲染是由 Monocle 提供的,但我不认为 Oracle 官方支持使用 Monocle 进行无头渲染(虽然我不认为官方支持任何形式的 JavaFX 无头渲染,所以我猜 Monocle 是否可以正常工作对你来说,一定要使用它)。

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

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

如果有疑问,请咨询 openjfx-dev 邮件列表上的 JavaFX 开发人员。

如果您在 Linux 下运行,则按照 Jan Zarnikov 的回答建议使用 Xvfb 可能是一个很好的解决方案,并且可能比使用 Monocle 更可取。

于 2012-09-01T18:05:29.577 回答