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

11
我正在尝试自动化测试运行在Java 7u6上的JavaFX 2应用程序,并集成Jemmy3JemmyFX到我的构建环境中。简单的冒烟测试在所有相关操作系统上运行。
作为下一步,我想将测试作为持续部署过程的一部分运行。由于当前CI服务器运行在不受JavaFX官方支持的OpenSUSE上,因此我在虚拟机中安装了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测试或机器人交互?
  • 你是如何配置该系统以使其正常工作的?

1
我猜想在JavaFX 8推出之前,(无界面) CI服务器测试JavaFX的支持还不可用 (根据这些jiras:http://javafx-jira.kenai.com/browse/RT-20494 和 http://javafx-jira.kenai.com/browse/RT-20510)。也许JavaFX QA团队的Sergey会更清楚,他有时会查看这个问答网站。 - jewelsea
除非 Sergey 提供了完全不同的答案,否则如果你将其作为答案提交,我愿意接受这个作为事实。 - Urs Reupke
2个回答

12

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

我们不使用 JemmyFX。我们只有非常简单的测试,使用类似于这个 JUnit Rule 的规则: 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

7

在JavaFX 8之前,不支持(headless)CI服务器测试JavaFX。

以下是基于这些JavaFX问题跟踪记录的答案:

  • JDK-8088651 “Headless Glass toolkit needs to be connected to Quantum and Prism unit tests”
  • JDK-8091286 “Quantum needs headless and headful tests”。

更新:2015年1月8日

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

Java 8源代码当前包括一个名为Monocle的最小呈现引擎,为JavaFX组件提供Headless渲染(以及各种其他目标平台的渲染)。我从未使用过Monocle,无法提供有关如何将其用于无头渲染的详细说明。我认为要使用Monocle,您目前需要从源代码构建自定义的JavaFX版本(因为我认为Monocle通常仅在嵌入式JavaFX版本中提供,而不是与桌面Java运行时和JDK环境一起提供的标准JavaFX版本)。

有关Monocle的信息可以在JavaFX wiki上找到。

尽管Monocle提供了无头渲染,但我认为Oracle并不支持使用Monocle进行无头渲染(虽然我认为在任何形式下都不支持JavaFX的无头渲染,因此如果Monocle对您有效,那么请使用它)。

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

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

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

如果您正在Linux下运行,则使用Jan Zarnikov的答案建议的Xvfb可能是一个很好的解决方案,而且可能优于使用Monocle。


更新了答案,提供了我所知道的最新信息。 - jewelsea
这个答案建议将Monocle作为额外的依赖项。 - Greg Kopff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接