首先说一下背景,在项目中使用windows执行机进行rfs脚本运行时,遇到两个问题:
1、Jenkins的多个slave节点和master的连接通过windows插件去建立,如果出现slave断连,无法自动恢复连接且无法及时得到告警;
2、Windows经常因为系统更新或者运行依赖的软件、浏览器等使得环境变化导致脚本运行失败且中断,虽然有些更新可以通过设置去关闭,但还是会莫名其妙出现自动更新,或者有些提示窗口影响浏览器运行;
因此思考是否可以使用linux执行机来跑呢?经过多次尝试,的确可以实现,不过各有其优缺点,文章后面会简单总结。
以下是所需环境的搭建步骤:
1、安装xvfb
因现有资源限制,使用的linux虚拟机都是服务器版,无可视化界面;因此安装一个可以提供浏览器运行的虚拟环境,即xvfb。
经过多次尝试,最终选定了Ubuntu14.04以及Ubuntu16.04,这两个版本亲测可用,安装方法如下:
apt-get install xvfb
2、安装python
一般情况下,ubuntu自带python2.7,可直接使用。
3、安装rfs环境
方法一,在线安装,使用如下命令即可
apt-get install robotframework-selenium2Library
或者使用 pip install robotframework-selenium2Library
系统会根据源自动安装最新版本的依赖包:selenium,robotframework,decorator。
方法二,使用安装包安装:
依次下载版本配套的selenium,robotframework,decorator,robotframework-selenium2Library;然后逐个解压并使用python setup.py **安装。
4、在Selenium2Library中新增关键字
因xvfb需要在运行浏览器之前启动,而启动方法默认的Selenium2Library库中是没有的,我们先自定义两个关键字用来启动和关闭xvfb;只要在Selenium2Library原有关键字中添加以下代码即可:
from pyvirtualdisplay import Display;
def Start_Virtual_Display(self):
self.display = Display(visible=0, size=(1680,1050))
self.display.start()
def Stop_Virtual_Display(self):
self.display.stop()
5、根据selenium版本安装firefox以及对应版本的驱动geckodriver
此步简单,跳过
至此,运行脚本的环境应该OK了,我们简单写一个脚本测试一下:
Run Keyword If '${IsVirtualDisplay}' == 'YES' Start Virtual Display
Open Browser https://www.baidu.com firefox
Close All Browsers
Run Keyword If '${IsVirtualDisplay}' == 'YES' Stop Virtual Display
以上脚本写入test.txt文件里,使用以下命令执行:
pybot -v IsVirtualDisplay:YES ../test.txt
运行开始以后会打出日志以及运行结果,PASS即为成功,失败会有截图。
经一段时间使用,发现完全可以解决上面遇到的两个问题,但是同时也有同事反馈:
1、执行失败时无法通过观察浏览器动作去定位问题;
2、部分元素操作结果和windows不一致,可能原因有很多种,还需深入研究。