前言
实际上是 docker 中部署一个 Selenium Grid,它用于分布式自动化测试,就是一套Selenium 代码可在不同的环境上运行。
Selenium Grid 又分为:
hub :主节点,它首先根据你的代码来识别分配到哪个node节点去运行;
node:分支节点,由主hub主节点分配给本地/远程node来运行测试用例。
环境准备:
- centos
- docker
- python3 + selenium 等库
一、docker-selenium搭建
由于广深小龙不喜欢先pull一个镜像下来,我是直接run起来。
1、docker 安装 主节点 selenium/hub:
sudo docker run -dp 4444:4444 --name selenium-hub selenium/hub
-d:挂后台运行
-p:映射ip
2、docker 安装 分支节点 selenium/node-chrome:
当然还有debug版本、Firefox版本的分支节点,这里说chrome。了解更多:https://hub.docker.com/search?q=selenium%2Fnode-&type=image
sudo docker run -d --link selenium-hub:hub selenium/node-chrome
以上步骤喝杯茶,等待一下下载完成后就会直接run起来。
3、run起来后,输入:docker ps
[root@iZbp19lugf22zbsubsf1y6Z ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d33303b6a7fe selenium/hub "/opt/bin/entry_poin…" 2 days ago Up 2 days 0.0.0.0:4444->4444/tcp selenium-hub ff03e232af44 selenium/node-chrome "/opt/bin/entry_poin…" 2 days ago Up 2 days vigorous_agnesi
可以看到这两个镜像在运行着,接下来我们调试脚本。
二、调试脚本
由于当时项目需求,我将脚本放置服务器上试运行。大概是:docker + docker-selenium + jenkins + python3 + pytest
pytest的优点、插件都太多了,如分布式、前置后置,自定义顺序执行用例,漂亮报告等等
1、测试脚本如下:
这里需要注意更改你的服务器主机ip,端口对应主节点的映射端口。
from selenium import webdriver import time driver = webdriver.Remote( command_executor='http://你的服务器主机ip:4444/wd/hub', desired_capabilities={'browserName': 'chrome'} ) driver.get('https://www.cnblogs.com/gsxl/') print("get 广深小龙 博客园") text = driver.find_element_by_id("Header1_HeaderTitle").text driver.find_element_by_id("Header1_HeaderTitle").click() print(text) time.sleep(1) driver.quit() print("运行完毕,即将关闭...")
运行结果:
[root@iZbp19lugf22zbsubsf1y6Z ~]# python3 test.py get 广深小龙 博客园 广深-小龙 --扬帆起航! 运行完毕,即将关闭... [root@iZbp19lugf22zbsubsf1y6Z ~]#
如果在容器外部可以使用服务器本地ip,容器内部需要使用服务器主机ip,既是公网ip。
这样调试后我们便可以通过 jenkins 持续集成进行测试了。
欢迎来大家QQ交流群一起学习:482713805