我在Jenkins工作,运行用Selenium编写的UI测试。该作业可以同时运行它的多个实例。我在尝试使用Xvfb(Xvfb plugin或其他)时遇到了问题。
使用Xvfb插件
配置如下。 该插件将相同的显示端口分配给2个并发作业实例,然后一个失败。
从Xvfb日志(注意displayfd为2,两种情况下屏幕均为0):
Xvfb starting$ /usr/bin/Xvfb -displayfd 2 -screen 0 1024x758x16 -fbdir /srv/jenkins/xvfb-86-2156913754362856583.fbdir
Xvfb starting$ /usr/bin/Xvfb -displayfd 2 -screen 0 1024x758x16 -fbdir /srv/jenkins/xvfb-87-5845090375656014678.fbdir
以上2个作业实例中的一个失败。失败的信息是:
02:11:51 _XSERVTransSocketINETCreateListener: ...SocketCreateListener() failed
02:11:51 _XSERVTransMakeAllCOTSServerListeners: server already running
如何解决此错误,以便并发实例运行时没有任何问题?
此外,我想知道Xvfb插件如何将显示关联到正在运行的浏览器实例(在本例中为Firefox)。它是否在内部export DISPLAY=:xx
,其中xx =插件计算的显示端口?
命令行(不使用Xvfb插件)
我尝试的第二种方法是不使用插件并使用CLI直接运行Xvfb。我使用Jenkins env变量BUILD_NUMBER来确保与作业实例的唯一显示关联。
export DISPLAY=:${BUILD_NUMBER}
Xvfb :${BUILD_NUMBER} -screen 0 1024x768x24 &
Xvfb在两个作业实例中都启动正常,但测试失败了。
Failed to connect to binary FirefoxBinary(/usr/local/bin/firefox) on port 7055; process output follows:
Error: cannot open display: 0:0
似乎测试仍在尝试使用显示0:0。
非常感谢任何帮助解决此问题。
答案 0 :(得分:1)
您是否曾尝试在Jenkins中使用Display环境变量,同样的Xvbf已经开始使用?在我的情况下,它工作,我按照本文headless execution selenium tests in Jenkins
中描述的说明进行操作