自动化测试需要考虑到兼容性的时候,之前的做法是每个执行机上安装不同版本的浏览器,实际上这样做会很浪费硬件资源,现在有了docker容器化技术,让一切变得简单。
工具清单:
语言:python 2.7
虚拟机工作台:workstations 14
虚拟机系统:Ubuntu 16.04 LTS
docker:Docker version 17.03.2-ce
自动化测试软件:selenium
虚拟机连接工具:xshell
node连接器:vnc viewer
1、安装Ubuntu系统
首先安装一台Ubuntu系统的服务器,可以在workstations里面创建一个虚拟机,具体百度一下;
2、安装docker,及获取镜像
虚拟机创建好了之后使用xshell连接,如果连接不上请参考我的另一篇文章:https://www.cnblogs.com/gcgc/p/9849331.html
2.1 安装docker
2.2 获取镜像
分别执行下面三行命令,此次我们需要3个镜像(1个Hub,2个Node),同时为了可以直观的看到实验结果,决定选用自带VNC Server的debug版本
docker pull selenium/hub
docker pull selenium/node-firefox-debug
docker pull selenium/node-chrome-debug
如果从官方仓库获取慢的话(经测试早上获取速度还可以),可以使用docker中国的官方镜像加速,
docker pull registry.docker-cn.com/selenium/hub
或者使用网易的加速器
新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 来配置 Daemon。
请在该配置文件中加入(没有该文件的话,请先建一个):
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
3、 使用镜像创建容器
格式为:docker run 参数 镜像名
docker run -d -p : --name selenium_hub registry.docker-cn.com/selenium/hub
docker run -d -p : --link selenium_hub:hub --name chrome_node selenium/node-chrome-debug
docker run -d -p : --link selenium_hub:hub --name firefox_node selenium/node-firefox-debug
:
表示新启动的 container 能通过内部网络与selenium_hub:hub 这个container 进行连接,即 node 能与 hub 建立网络通讯;chen@ubuntu:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a3110167a391 selenium/node-chrome-debug "/opt/bin/entry_po..." About an hour ago Up About an hour 0.0.0.0:->/tcp chrome_node
b230ed926f09 selenium/node-firefox-debug "/opt/bin/entry_po..." About an hour ago Up About an hour 0.0.0.0:->/tcp agitated_jepsen
ac2bd2b8912f registry.docker-cn.com/selenium/hub "/opt/bin/entry_po..." hours ago Up About an hour 0.0.0.0:->/tcp selenium_hub
出现这个页面就代表成功连接了
编写脚本测试一下
#coding=utf-
from selenium import webdriver
firefox_capabilities ={
"browserName": "firefox",
"version": "62.0.3",#注意版本号一定要写对
"platform": "ANY",
"javascriptEnabled": True,
"marionette": True,
}
browser=webdriver.Remote("http://192.168.179.128:5555/wd/hub",desired_capabilities=firefox_capabilities)#注意端口号5555是我们上文中映射的宿主机端口号
browser.get("http://www.baidu.com")
browser.find_element_by_id('kw').send_keys('docker')
browser.get_screenshot_as_file("D:/baidu.png")
browser.close()
上面firefox_capabilities参数来自于grid/console这里:
运行脚本后,可以在VNC中实时看到运行界面
遗留问题:假如需要在不同版本的firefox浏览器上去运行脚本,测试脚本该怎么写,不同火狐版本的镜像怎么获取,