我们在使用Selenium进行自动化测试时,需要首先搭建Selenium的运行环境,我们需要安装JDK,安装不同版本的firefox/chrome,还要保证chromedriver/geckodriver与浏览器版本的匹配,最后安装selenium-standalone-server启动或者连接到hub等。这些步骤非常的繁琐且耗时.如果我们需要在Linux环境下执行测试任务,但是一般情况下Linux服务器是不会安装UI界面的,那么我们还要先安装UI界面,再想想后期的维护,哇!!头大!!
那么有没有什么办法简化这些步骤,并且使维护起来更加方便呢?这时我们就需要用到SeleniumHQ这个项目了.
SeleniumHQ官方提供了基于docker的selenium方式,非常方便.
项目地址:https://github.com/SeleniumHQ/docker-selenium
简介
SeleniumHQ提供的Docker镜像包括了支持Chrome和Firefox的Selenium Standalone Server Hub和Node节点的配置,包括如下几个镜像:
selenium/base: 包含了Java和Selenium Server的基础镜像,这个我们一般用不上
selenium/hub: Selenium Grid运行方式中的Hub镜像
selenium/node-base: 包含了虚拟桌面的Selenium Grid运行方式中的Node基础镜像,这个我们一般用不上
selenium/node-chrome: Selenium Grid运行方式中的带Chrome的Node镜像
selenium/node-firefox: Selenium Grid运行方式中的带Firefox的Node镜像
selenium/node-chrome-debug: Selenium Grid运行方式中的带Chrome和VNC服务器的Node镜像
selenium/node-firefox-debug: Selenium Grid运行方式中的带Firefox和VNC服务器的Node镜像
selenium/standalone-chrome: 单独运行Selenium的带Chrome的镜像
selenium/standalone-firefox: 单独运行Selenium的带Firefox的镜像
selenium/standalone-chrome-debug: 单独运行Selenium的带Chrome和VNC服务器的镜像
selenium/standalone-firefox-debug: 单独运行Selenium的带Firefox和VNC服务器的镜像
可以说提供的镜像满足了我们在调试/生产两种环境下的实际使用需求,
下面我们以Selenium Grid + 带VNC模式和Selenium Standalone不带镜像模式分别说下使用方法。
这里我们用了两台机子:192.168.123.21(Hub节点+Node节点)和192.168.123.23(Node节点)。
创建Selenium Grid Hub
首先在192.168.123.21我们创建一个用于selenium grid的network:
docker network create grid
然后拉取hub镜像:
docker pull selenium/hub:3.141.59-vanadium
启动selenium-hub:
docker run -d -p 4444:4444 --net grid --name selenium-hub selenium/hub:3.141.59-vanadium
启动完成http://192.168.123.21:4444/grid/console已经可以被访问
创建node 节点
1、在21机器上创建node节点(chrome 不带vnc)
docker run -d --net grid -e HUB_HOST=selenium-hub -v /dev/shm:/dev/shm selenium/node-chrome:3.141.59-vanadium
已经可以看,证明连接成功了
2、在23机器上窗机node节点(firefox 带vnc)
部署在非hub的机器上的启动命令:
#启动命令格式: $ docker run -d -p <node_port>:5555 -e HUB_HOST=<hub_ip|hub_name> -e HUB_PORT=4444 -e REMOTE_HOST="http://<node_ip|node_name>:<node_port>" selenium/node-firefox:3.141.59-vanadium
192.168.123.23机器上的启动命令为:
$ docker run -d -p 5555:5555 -p 5900:5900 -e HUB_HOST=192.168.123.21 -e REMOTE_HOST="http://192.168.123.23:5555" selenium/node-firefox-debug:3.141.59-vanadium
不加HUB_PORT 默认就是4444端口
VNC的端口是5900 ,默认密码是: secret
node与hub的通信端口5555
启动完成,就可以用VNC的客户端来连接容器,当有任务执行时,我们是可以在VNC中看到浏览器的打开和执行任务的.
一些其他参数:
JAVA_OPTS Java环境选项
docker run -d -p 4444:4444 -e JAVA_OPTS=-Xmx512m --name selenium-hub selenium/hub:3.141.59-vanadium
SE_OPTS Selenium配置选项
docker run -d -p 4444:4444 -e SE_OPTS="-debug" --name selenium-hub selenium/hub:3.141.59-vanadium
JAVA_CLASSPATH Java classpath
默认情况下,Java的类路径是/opt/selenium/*:。但是您可以使用JAVA_CLASSPATH用您的类覆盖它。当您希望使用自己的JAR文件时,这非常有用。注意,/opt/selenium/*总是需要包含在内,因为selenium JAR文件位于目录中。
docker run -d -p 4444:4444 -v $(pwd):/mnt -e JAVA_CLASSPATH="/mnt/*:/opt/selenium/*:." -e SE_OPTS="-servlets com.example.your.AwesomeServlet" --name selenium-hub selenium/hub:3.141.59-vanadium
设置屏幕分辨率
默认情况下,节点开始的1360×1020的屏幕分辨率与24位的色深,以及一个96 DPI这些设置可以通过指定被调整SCREEN_WIDTH,SCREEN_HEIGHT,SCREEN_DEPTH,和/或SCREEN_DPI环境变量启动容器时。
docker run -d -e SCREEN_WIDTH=1366 -e SCREEN_HEIGHT=768 -e SCREEN_DEPTH=24 -e SCREEN_DPI=74 selenium/standalone-firefox
浏览器实例/插槽的数量
默认情况下,每个映像每个容器只允许一个插槽,这是我们推荐的最佳实践,因为所有容器资源和变量都将用于该浏览器,这有助于获得更稳定的测试。
然而,如果希望每个节点有更多插槽,可以通过环境变量NODE_MAX_INSTANCES配置环境变量。例如,一个Firefox节点有5个插槽:
docker run -d -e HUB_HOST=<hub_ip|hub_name> -e NODE_MAX_INSTANCES=5 selenium/node-firefox:3.141.59-vanadium
不要忘记将其与环境变量NODE_MAX_SESSION结合使用,后者设置了在节点中同时运行的最大测试量。根据前面的示例,如果NODE_MAX_INSTANCES=5,那么NODE_MAX_SESSION也应该至少为5。完整的例子
docker run -d -e HUB_HOST=<hub_ip|hub_name> -e NODE_MAX_INSTANCES=5 -e NODE_MAX_SESSION=5 selenium/node-firefox:3.141.59-vanadium
在无头模式下运行
无论火狐和Chrome浏览器支持无头的模式下运行测试。使用无头模式时,无需启动Xvfb服务器。
为了避免启动服务器,您可以将START_XVFB环境变量设置为false(或以外的任何其他值true),例如:
docker run -d --net grid -e HUB_HOST=selenium-hub -e START_XVFB=false -v /dev/shm:/dev/shm selenium/node-chrome
其他使用方式参考官网文档: https://github.com/SeleniumHQ/docker-selenium#configuring-the-containers
Standalone形式运行
docker run -d -p 4444:4444 -v /dev/shm:/dev/shm selenium/standalone-firefox:3.141.59
最后在测试用例里面,更改Configuration.remote地址就好了。
还没有评论,来说两句吧...