RobotFramework + SwingLibrary:测试不适用于SSH

时间:2016-12-14 03:05:18

标签: java swing ssh vagrant robotframework

这是一个痛苦的问题。我有一个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搜索错误并非超级有用。什么,有人吗?我在这个问题上伤得很厉害。

1 个答案:

答案 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