这是一个痛苦的问题。我有一个Java Swing应用程序,我试图使用带有SwingLibrary的Robot Framework进行测试。我在Vagrant盒子里做所有事情。我有一个类似的运行脚本,将开始测试:
export CLASSPATH=swinglibrary-1.8.0.jar:echoapp.jar
export JAVA_OPTS="-Djava.awt.headless=true"
jython `which robot` --loglevel DEBUG test.robot
当我在VM中运行它时,此脚本完全正常。但如果我通过SSH运行它,我就无法正常工作。我看到以下错误消息:
[ ERROR ] Error in file '/vagrant/robotTests/test.robot': Getting keyword
names from library 'SwingLibrary' failed: Calling dynamic method
'getKeywordNames' failed: ExceptionInInitializerError
我完全糊涂了。我最初认为这是一个X11问题,但随后我打开X11转发,连接到Putty的Vagrant盒子,并让应用程序出现在X11窗口中。
Google搜索错误并非超级有用。什么,有人吗?我在这个问题上伤得很厉害。
答案 0 :(得分:4)
好的,这就是我的问题所在。尽管设置了X11转发,但X服务器还没有合作。因为我准备无论如何都要在Jenkins中运行这些测试,从长远来看这对我没有帮助 - 我需要一个替代X服务器。
幸运的是,我不是第一个尝试GUI测试的人。事实证明,有一个X服务器设计用于无头系统,称为X虚拟帧缓冲区(Xvfb)。来自the Wikipedia article:
Xvfb或X虚拟帧缓冲区是实现X11显示服务器协议的显示服务器。与其他显示服务器相比,Xvfb在内存中执行所有图形操作,而不显示任何屏幕输出。从客户端的角度来看,它的行为与任何其他X显示服务器完全相同,可以根据需要提供请求并发送事件和错误。但是,没有显示输出。此虚拟服务器不需要运行它的计算机具有屏幕或任何输入设备。只需要一个网络层。
在CentOS / RHEL上,xorg-x11-server-Xvfb
包在默认存储库中可用。
Available Packages
Name : xorg-x11-server-Xvfb
Arch : x86_64
Version : 1.17.2
Release : 22.el7
Size : 843 k
Repo : base/7/x86_64
Summary : A X Windows System virtual framebuffer X server.
URL : http://www.x.org
License : MIT and GPLv2
Description : Xvfb (X Virtual Frame Buffer) is an X server that is able to run on
: machines with no display hardware and no physical input devices.
: Xvfb simulates a dumb framebuffer using virtual memory. Xvfb does
: not open any devices, but behaves otherwise as an X display. Xvfb
: is normally used for testing servers.
安装它:
sudo yum -y install xorg-x11-server-Xvfb
完成后,我可以使用xvfb-run
命令在我的环境中运行我的shell脚本。
[vagrant@localhost robotTests]$ xvfb-run ./run.sh
==============================================================================
Test
==============================================================================
Test <Redacted One> | PASS |
------------------------------------------------------------------------------
Test <Redacted Two> | PASS |
------------------------------------------------------------------------------
Test <Redacted Three> | PASS |
------------------------------------------------------------------------------
Test | PASS |
3 critical tests, 3 passed, 0 failed
3 tests total, 3 passed, 0 failed
==============================================================================
Output: /vagrant/robotTests/output.xml
Log: /vagrant/robotTests/log.html
Report: /vagrant/robotTests/report.html