Urs*_*pke 10 continuous-integration automated-tests headless xvfb javafx-2
我正在尝试使用集成的JavaFX 2.2自动测试在Java 7u6上运行的JavaFX 2应用程序.为此,我将Jemmy3和JemmyFX构建并集成到我的构建环境中.在所有相关操作系统上运行简单的冒烟测试.
作为下一步,我希望将测试作为持续部署过程的一部分来运行.由于当前CI服务器在OpenFUSE上运行,而JavaSX没有正式支持,我在虚拟机中安装了Ubuntu Server并安装了gtk2.
为了弥补缺乏完全成熟的窗口系统,我尝试在Xvnc和Xvfb上运行测试,但无济于事.
在Xvnc上,测试失败了
Prism ES2 Error - nInitialize: glXChooseFBConfig failed
Run Code Online (Sandbox Code Playgroud)
而在Xvfb上,他们给了我
Xlib: extension "RANDR" missing on display ":10".
Run Code Online (Sandbox Code Playgroud)
一篇博文建议安装gtk-engines-pixbuf
以缓解第二个问题,但这只改变了错误消息中的显示数量.
现在,我召集了StackOverflow的JavaFX知识并提出要求
小智 12
我遇到了类似的问题 - 在Maven的无头环境中运行JUnit测试.
我们不使用JemmyFX.我们只有非常简单的测试,使用类似于这个的JUnit规则:https: //gist.github.com/andytill/3835914 (这是使用Platform.runLater(...)的代码所必需的)
当前版本的JavaFX(随JDK 1.7.0-21提供)似乎在Ubuntu 12.04上的Xvfb中运行而没有运行Xserver:
Xvfb :99
DISPLAY=:99 mvn clean install
直到JavaFX 8才支持JavaFX的(无头)CI服务器测试.
根据这些JavaFX问题跟踪记录中的信息进行解答:
2015年1月8日更新
链接的JavaFX问题跟踪记录未针对Java 8实现,并已重新分配给Java 9.
Java 8源代码目前包括一个名为Monocle的最小渲染引擎,它为JavaFX组件提供无头渲染(以及各种其他目标平台的渲染).我从未使用过Monocle,也无法提供有关如何将其用于无头渲染的详细说明.我认为使用单片眼镜,你现在需要从源头进行的JavaFX的定制版本(因为我认为单片眼镜通常只在嵌入式的JavaFX版本出货,这不是标准的JavaFX版本附带的桌面Java运行时和JDK环境) .
有关Monocle的信息可在JavaFX wiki上找到.
虽然无头呈现由单片眼镜提供的,我不认为使用单片眼镜进行无头渲染正式被Oracle支持(虽然我不认为任何形式的JavaFX的无头渲染官方支持,所以我想,如果单片眼镜效果很好对你来说,一定要用它).
Monocle中的无头渲染是一种软件渲染实现,因此一些图形基元的执行可能比桌面环境中JavaFX的标准硬件加速操作慢.
可能还有其他方法允许JavaFX在我不知道的无头环境中运行.
如果有疑问,请在openjfx-dev邮件列表中询问JavaFX开发人员.
如果你在Linux下运行,按照Jan Zarnikov的建议使用Xvfb的答案可能是一个很好的解决方案,可能比使用Monocle更好.