原新浪博客(http://blog.sina.com.cn/billsona)搬迁至此。
文章目录
前言
众所周知,linux的稳定性比windows要高出几个层次。很多自动化测试或者持续集成或者DevOps的人可能会碰到这种苦恼,做WEB页面自动化测试的时候,windows机器不够稳定,经常分析半天自动化执行失败的用例是环境不稳定导致的。另外,为了稳定运行,持续集成的服务器基本上也是以linux为主。本文会教你如何在linux下完成web页面自动化测试,而不需要像传统的一样必须有显示界面,必须要真正的打开浏览器。
先说一说无头浏览器(headless browser)。无头浏览器是指的没有GUI的浏览器,用人话说就是浏览器运行的时候,不依赖操作系统的图形用户界面,浏览器的运行,操作全部是在内存中进行的。无头浏览器在网络爬虫以及WEB界面自动化测试中已经在广泛运用。目前业界主流的无头浏览器主要有PhantomJS和Headless Chrome。 Headless Chrome是google开发的,目前已经合并到Google Chrome当中去了,也就是说,当前的Chrome支持headless方式调用。并且Google宣称能够完全兼容Google Chrome上的操作。
本文主要介绍的是CentOS7(我们的CICD服务器是CentOS7)下使用Headless Chrome+Selenium+RobotFramework进行web界面自动化测试的实践。
一、安装Chrome和chromedriver
1. 安装Google Chrome
下载RPM安装包
# wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
安装下载的RPM包
# yum install -y google-chrome-stable_current_x86_64.rpm
如果要卸载安装的Chrome,可以用命令yum autoremove -y google-chrome (**注意:这个命令我本人并没有进行验证可用性**)。
升级glib2库
# yum update glib2 -y
查看安妆的Chrome版本
# /opt/google/chrome/chrome --version
如果显示类似如下图的内容,则基本上说明安装成功。
2. 安装chromedriver
下载安装包(注意:一定要下载跟chrome版本对应的driver)
# wget https://chromedriver.storage.googleapis.com/77.0.3865.40/chromedriver_linux64.zip
解压zip包
# uzip -d /opt/chromedrivers/ chromedriver_linux64.zip
将解压后的文件放到/opt/drivers目录下
# mkdir -p /opt/drivers
# mv chromedriver /opt/drivers/
3. 配置PATH环境变量
在配置文件/etc/profile中把chromedriver的存放路径/opt/drivers添加到文件中PATH环境变量中,如下图所示,添加后保存退出。
执行下面命令让修改的环境变量生效
# source /etc/profile
4. 关于修改/etc/hosts文件
在有的资料中,特别说明了将127.0.0.1环回地址绑定到localhost,这一操作的具体意义目前我并没有去深究。但是在我的实践中,如果不做这个绑定,不会影响具体的执行。
二、安装RobotFramework和robotframework-selenium2library库
这些都是在安装好python以后,通过pip install命令去安装的,这里不再赘述。要提醒的是,现在这一套工具集在python3.x运行兼容性良好,python2.x马上就停止维护了,尽量用新的3.x版。
三、踩过的坑
error: DevToolsActivePort file doesn’t exist
这个错误的主要原因是robot framework中调用运行chrome的时候,没有指定相关参数,或者参数指定不正确。
举个例子,平时我们设计测试用例时,如果使用Open Browser方法,只要指定浏览器中要打开的地址,以及使用的浏览器类型就行了,如下如图所示。
但是在linux下,因为没有图形界面,要采用leadless方式调用,得用如下的写法。
需要注意的是,对于以上写用例的风格请不要参考,这不是一种好的方式,能参数化的地方尽量参数化,这样将来的用例维护成本会很低。
WebDriverException: Message: ‘chromedriver’ executable needs to be in PATH
linux主机上已经设置了对应的PATH,用命令行手动执行完全正常,该问题仅在jenkins中执行的时候才会出现。这主要是因为Jenkins没法获取linux主机的PATH信息,因此也找不到对应的chromedriver。解决办法就是在jenkins中设置这个PATH。 在Jenkins中找到对应的linux主机的node的设置,添加PATH变量。如下图所示。