0


selenium Grid 4.x版本 部署操作 笔记

selenium Grid 4.x版本 部署操作 笔记

selenium Grid 是 selenium套件 的一部分,实现分布式测试,多用于浏览器兼容性测试。

使用 hub-nodes 理念:一台 hub 控制机节点,多台 nodes 负载机节点。

前置条件:(1)已经部署了 JDK;(2)已经下载好了各个浏览器的webdriver驱动器(Grid会自动识别本电脑上的驱动)

# 各个浏览器驱动下载地址:
chrome:https://chromedriver.chromium.org/downloads
firefox:https://github.com/mozilla/geckodriver/releases
edge:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
IE:https://www.selenium.dev/downloads
safari:内置了,不用另外下载
# 下载好后,放到 Python 安装目录的 Scripts目录

一、下载与selenium库的版本对应的selenium Grid版本

查看 selenium 版本:进入cmd命令行终端输入

pip show selenium

selenium Grid 下载地址:https://www.selenium.dev/downloads/

下载页面

往下找往期版本:

往期版本页面

4.x版本下载:

文件名

**我下载 4.3版本的Grid

selenium-server-4.3.0.jar

进行演示**

二、启动及配置selenium Grid

  1. 进入 cmd 命令行终端
  2. 进入 selenium-server-4.3.0.jar 文件所在的目录 cd D:\SeleniumGrid\
  3. 启动 standalone --hub:(最简单模式)java -jar selenium-server-4.3.0.jar standalone --hub localhost --port 3333 --max-sessions 10 --log D:\SeleniumGrid\gridLog.log# standalone:意思是独立运行(我也没搞清是什么意思),让 hub 自己独立运行,不能添加 node# --hub : 表示此机器启动hub节点,后边跟hub主机的IP地址# --port : 此参数后跟端口号;设置启动 hub 或 node 服务的端口号;默认端口是4444,也可以自己设置netstat -ano | findstr "3333"# 可以查看Windows的“4444”端口有没有被占用# --max-sessions : 设置最大会话请求数,默认最大会话请求数是16# -I : 指定浏览器# --log : 把日志写到指定路径指定文件
  4. 启动hub和node:(适合中型和小型并发)# 查看Windows的“4444”端口有没有被占用netstat -ano | findstr "4444"# 启动hubjava -jar selenium-server-4.3.0.jar hub --host localhost --port 3333 --log D:\SeleniumGrid\gridLog.log# hub : 启动hub节点# --host : 跟hub的主机名/IP地址# --port : 此参数后跟端口号;设置启动 hub 的端口号;默认端口是4444,也可以自己设置# --max-threads : 最大线程数,默认是 可用处理器*3# --log : 把日志写到指定路径指定文件# 启动nodejava -jar selenium-server-4.3.0.jar node --hub http://localhost:3333 --port 4444 --max-sessions 10 -I firefox --log D:\SeleniumGrid\node4444.logjava -jar selenium-server-4.3.0.jar node --hub http://localhost:3333 --port 5555 --max-sessions 10 -I edge -I chrome --log D:\SeleniumGrid\node5555.log# --hub : 后边跟hub主机的url,意思就是为哪个hub打开的node# --port : 此参数后跟端口号;设置启动 node 服务的端口号;默认端口是5555,也可以自己设置# --max-sessions : 设置最大会话请求数,默认最大会话请求数是16# -I : 指定浏览器# --log : 把日志写到指定路径指定文件
  5. 使用 http://localhost:3333 就可以显示 hub 的显示台:standalone的显示台:hub显示台hub:node1、node2显示台:hub显示台
  6. hub 的组件:- Event Bus:其他组件之间的通信路径- Session Map:负责将 session ID 映射到运行会话的节点(默认端口 5556)- New Session Queue:将新会话请求添加到队列中,然后让分发服务器处理它(默认端口 5559)。- Distributor:分发服务器(默认端口 5553)。- Router:Grid 的入口, 负责将请求定向到正确的组件(默认端口 4444,可以自己设,但要记住,访问 hub显示台就靠端口号了)。
  7. 了解了 hub 组件,就可以采用 Distributed 的方式启动 hub ,即分别启动各组件(各组件启动顺序很重要) (这种方式适合于大型并发,我觉得我这辈子应该是用不到了)# 第一步启动:java -jar selenium-server-4.3.0.jar event-bus --log D:\SeleniumGrid\evenbus.log# 第二步启动:java -jar selenium-server-4.3.0.jar sessions --log D:\SeleniumGrid\sessions.log# 第三步启动:java -jar selenium-server-4.3.0.jar sessionqueue --log D:\SeleniumGrid\sessionqueue.log# 第四步启动:java -jar selenium-server-4.3.0.jar distributor --sessions http://localhost:5556 --sessionqueue http://localhost:5559 --bind-bus false --log D:\SeleniumGrid\distributor.log# --bind-bus : 当为false时,组件将连接到event-bus。当为ture时,组件将绑定到event-bus,由event-bus启动(通常由distributor和hub启动)。# 第五步启动:java -jar selenium-server-4.3.0.jar router --port 3333 --sessions http://localhost:5556 --sessionqueue http://localhost:5559 --distributor http://localhost:5553 --log D:\SeleniumGrid\router.log然后按正常启动 node 即可

三、Python+selenium Grid 并行测试

  1. Python 多线程简述:# Python 多线程要导入 threading 模块的 Thread 用于创建线程from threading import Thread# Thread(target=被执行的函数名, args=给被执行的函数传递的参数(这个参数是元组形式))# 创建两个线程t1 = Thread(target=被执行的函数名1)t2 = Thread(target=被执行的函数名1)# 运行两个线程t1.start()t2.start()t1.join()t2.join()# start 就是运行线程,join 等待这个线程运行完成,之后再执行主线程# 一般创建线程,先将所有start,再将所有join
  2. 测试代码from threading import Threadfrom selenium.webdriver import DesiredCapabilities, Remotefrom selenium.webdriver.common.by import ByclassGridTest():deftest_baidu(self, driver): driver.get('https://www.baidu.com/') driver.find_element(By.ID,'kw').send_keys('王心凌') driver.find_element(By.ID,'su').click()defnode_driver(self, node):if node =="firefox": brother = DesiredCapabilities.FIREFOX.copy() driver = Remote(command_executor="http://localhost:3333", desired_capabilities=brother)elif node =="chrome": brother = DesiredCapabilities.CHROME.copy() driver = Remote(command_executor="http://localhost:3333", desired_capabilities=brother) driver.implicitly_wait(10) driver.maximize_window() self.test_baidu(driver)defrunner(self): nodes_list =['firefox','chrome'] thread_list =[]for browther in nodes_list: t = Thread(target=self.node_driver, args=(browther,)) thread_list.append(t)for t in thread_list: t.start()for t in thread_list: t.join()if __name__ =='__main__': GridTest().runner()

运行结果:

image-20220807184924896

image-20220807185010057

OK ! 结束啦!最后,建议 hub节点 可以部署在一台虚拟机上,node节点 放在本机上,进行练习,不然都在本机上感觉不方便


本文转载自: https://blog.csdn.net/weixin_44022426/article/details/126215518
版权归原作者 南亭*.* 所有, 如有侵权,请联系我们删除。

“selenium Grid 4.x版本 部署操作 笔记”的评论:

还没有评论