Selenium 相关镜像
·selenium/hub
·selenium/node-chrome、selenium/node-chrome-debug
·selenium/node-firefox、selenium/node-firefox-debug
0 2环境搭建
2.1. 启动 Selenium 相关容器
# 运行主节点 hubdocker run -d -p 4444:4444 --name=hub selenium/hub # 运行 node 节点 chrome,注册到 hub 节点上docker run -d -p 5901:5900 --name=chrome --link=hub selenium/node-chrome docker run -d -p 5902:5900 --name=firefox --link=hub selenium/node-firefox# selenium/node-chrome 和 selenium/node-chrome-debug 的区别在于 debug 容器带有 VNC 服务端,可方便观看执行步骤docker run -d -p 5901:5900 --name=chrome --link=hub selenium/node-chrome-debugdocker run -d -p 5902:5900 --name=firefox --link=hub selenium/node-firefox-debug
启动后使用 Docker PS 查看运行中的容器
Node 节点注册成功后,可以在 hub-console 查看节点注册情况,地址为 Docker 主机 IP + Hub 主节点映射的端口号组成,如:http://localhost:4444/grid/console
2.2 执行测试
启动容器后,编写一条简单的测试用例在,可以看到使用 FireFox 浏览器驱动的测试将会自动分配到 node-firefox-debug 节点上执行:
from selenium import webdriverfrom selenium.webdriver import DesiredCapabilitiesdef test_demo(): driver = webdriver.Remote('http://localhost:4444/wd/hub', desired_capabilities=DesiredCapabilities.FIREFOX) driver.get("https://www.baidu.com") driver.find_element_by_id("kw").send_keys("test") time.sleep(2) driver.find_element_by_id("su").click() time.sleep(2) driver.quit()
2.3 使用 VNC 查看执行过程
下载并安装 VNC Viewer,连接 node-firefox-debug 实例来查看实际运行效果,方便调试,连接成功后直接运行测试即可看到实际运行效果。
注:VNC Viewer 默认登录密码为 secret
下载地址:https://www.realvnc.com/en/connect/download/viewer/
0 3使用 Docker Compose 快速创建 Web 测试环境
使用 Docker Run 启动容器相对来说也比较麻烦,我们可以使用 Compose 来做进一步的优化,快速创建 web 测试环境。
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务。然后使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
3.1 编写 docker-compose.yml 文件
示例:
hub: image: selenium/hub ports: - 4444:4444firefox: image: selenium/node-firefox-debug ports: - 5901:5900 links: - hubchrome: image: selenium/node-chrome-debug ports: - 5902:5900 links: - hub
3.2 启动并运行整个应用程序
执行 docker-compose up 命令来,也可以使用 docker-compose up -d 后台启动;
如果是在 docker-compose.yml 文件目录下执行命令则无需指定文件。
3.3 执行测试脚本
from selenium import webdriverfrom selenium.webdriver import DesiredCapabilitiesdriver = webdriver.Remote('http://localhost:4444/wd/hub', desired_capabilities=DesiredCapabilities.FIREFOX)driver.get("https://www.baidu.com")driver.find_element_by_id("kw").send_keys("测试")time.sleep(2)driver.find_element_by_id("su").click()time.sleep(2)driver.quit()
0
4
Selenium 搭配 Python 多线程执行分布式测试
配合 Docker 启动的容器执行以下测试代码,可以看到将会同时在 FireFox、Chrome 执行测试
示例代码:
import timefrom selenium.webdriver import DesiredCapabilitiesfrom threading import Threadfrom selenium import webdriverfrom time import ctime# 定义分布式运行环境caps = [{"host":"http://localhost:4444/wd/hub", "browser": DesiredCapabilities.FIREFOX}, {"host":"http://localhost:4444/wd/hub", "browser": DesiredCapabilities.CHROME}]def test_baidu(host, browser): driver = webdriver.Remote(command_executor=host, desired_capabilities=browser) driver.get('http://www.baidu.com') driver.find_element_by_id('kw').send_keys("测试") driver.find_element_by_id('su').click() time.sleep(2) driver.quit()if __name__ == '__main__': print(f'start: {ctime()}:') threads = [] # 创建线程 for cap in caps: t = Thread(target=test_baidu, args=(cap.get("host"), cap.get("browser"))) threads.append(t) # 启动线程 for t in threads: t.start() for t in threads: t.join() print(f'end: {ctime()}:')
链接:https://www.cnblogs.com/sharef/p/13651216.html
本文为51Testing经授权转载,转载文章所包含的文字来源于作者。如因内容或版权等问题,请联系51Testing进行删除
推荐阅读点击阅读☞一文搞定!那些Selenium常见的元素定位
点击阅读☞切换窗口时,用Selenium定位元素超方便
点击阅读☞用Selenium通过豆瓣的滑动验证码,超简单!
点击阅读☞Selenium那些值得再次巩固的知识
点击阅读☞元素定位只会用Selenium?也太落后了吧!
戳