docker+selenium web自动化测试环境的部署
1、使用SecureCRT或Docker Quickstart Terminal打开docker终端。
2、下载selemiunUI测试需要的镜像
命令 docker pull:从docker hub中下载镜像。
首先搜索需要pull的image
命令:docker search selenium
针对docker selenium ,这里需要pull的image分别是:
selenium/hub
selenium/node-chrome-debug
selenium/node-firefox-debug
目前只支持在chrome和firefox中进行测试
下载的命令是docker pull+镜像名称+tag
docker
pull
baozhida/selenium-hub:3.3.1
docker
pull
baozhida/selenium-node-chrome-debug:58
docker
pull
baozhida/selenium-node-firefox-debug:52
官方镜像可能会使打开的网页出现中文乱码,故可采用上述镜像。
说明:默认的tag是latest;dockerhub服务器在海外,所以网速时好时坏,有时还会timeout报错,多试几次一定能成功。
由于国内访问直接访问Docker hub网速比较慢,拉取镜像的时间就会比较长。
针对此问题可以从dockerhub上拉取,这时再使用加速器修改docker的registry-mirrors 。这里使用的是DaoCloud的加速器。
下面介绍如何使用daocloud获取加速器的方法。
首先在http://www.daocloud.io/进行注册登录。
待登录成功后,点击加速器,如图所示:
等一会儿会出现以下界面,选择Windows系统,复制获取到的registry-mirrors配置。
请确认你的 Docker Toolbox 已经启动,并执行下列命令(请将 加速地址替换为在加速器页面获取的专属地址)
docker-machine ssh default
sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=加速地址 |g" /var/lib/boot2docker/profile
exit
docker-machine restart default
更多环境的加速配置请参考以下帮助文档
http://guide.daocloud.io/dcs/daocloud-9153151.html
3、查看镜像
输入命令docker images查看已经下载的镜像
4、创建并运行容器
创建selenium hub容器dockerrun -d -p 4444:4444 --name selehub baozhida/selenium-hub:3.3.1
创建chrome node容器
docker run -d -p 5901:5900 --name node58 --linkselehub:hub
--shm-size=512mbaozhida/selenium-node-chrome-debug:58
创建firefox node容器
docker run -d -p 5912:5900 --name ff52 --linkselehub:hub
--shm-size=512m baozhida/selenium-node-firefox-debug:52
说明:
*-d参数:后台模式运行;
--name参数:别名;
-p参数:将容器的5900端口映射到docker的5901端口,访问Docker的5901端口即可访问到node容器;
--shm-size参数:docker默认的共享内存/dev/shm只有64m,有时导致chrome崩溃,该参数增加共享内存大小到512m.*
5、输入命令docker ps -a 查看正在运行的容器,处于up状态
6、在浏览器输入地址http://192.168.99.100:4444/grid/console
查看Selenium Grid控制台,能看到刚创建的容器已经正常注册
7、VNC远程浏览器环境
debug结尾的镜像都带有VNC服务端,本机安装VNC客户端,即可远程连接。
下载地址:https://www.realvnc.com/en/connect/download/vnc/
输入192.168.99.100:5901-->回车-->输入密码:secret-->确认-->进入chrome:58容器桌面
输入192.168.99.100:5901-->回车-->输入密码:secret-->确认-->进入firefox:52容器桌面
8、在本地运行下面的脚本进行测试。
#coding=utf-8
from selenium import webdriver
firefox_capabilities={
"browserName":"firefox",
"version": "52.0",#注意版本号一定要写对
"platform": "ANY",
"javascriptEnabled": True,
"marionette": True,
}
browser=webdriver.Remote("http://192.168.99.100:4444/wd/hub",desired_capabilities=firefox_capabilities)#注意端口号4444是我们上文中映射的宿主机端口号
browser.get("http://www.baidu.com")
browser.get_screenshot_as_file(r"C:/baidu.png")
browser.close()
上述代码的效果是:用firefox52.0打开百度界面,并截图保存在C盘中。
但按照以上操作,代码却报出了如下错误:
解决方法:
先按照(http://blog.csdn.net/liujingqiu/article/details/74857145)文中方法进行相应的修改。
然后使用官方镜像创建selenium hub容器:
关闭原selenium hub容器
docker stop “CONTAINER ID”(对应容器的ID)
删除原selenium hub容器
docker rm “NAMES”(按上述操作,这里的NAME使用selehub)
下载 selenium/hub镜像
docker pull selenium/hub(版本默认为latest)
创建selenium hub容器docker run -d -p 4444:4444 --nameselehub selenium/hub
再次运行脚本