Selenium Grid 简明用法

2019-10-29 16:33:25 浏览数 (1)

iTesting,爱测试,爱分享

前几天有同学问我selenium gird的问题, 简要告知后才知道,selenium gird仍然在很多公司的自动化里占很大比重,我一直觉得在Jenkins这种持续集成工具大行其道的今天,selenium gird用来做分布式运行的工具已经可以寿终正寝了,看来还是行业不同,关注点就不同,整理了elenium gird用法,分享给大家。

首先, Selenium Gird解决了一个什么问题?

Selenium-Grid allows you run your tests on different machines against different browsers in parallel. That is, running multiple tests at the same time against different machines running different browsers and operating systems. Essentially, Selenium-Grid support distributed test execution. It allows for running your tests in a distributed test execution environment. 简单的说, seleniumgrid允许你在不同的机器上针对不同浏览器并行运行测试。 也就是说,同时针对运行不同浏览器和操作系统的不同机器同时运行多个测试。基本上,Selenium-Grid支持分布式测试执行。它允许在分布式测试执行环境中运行测试。

其次,何时使用?

To run your tests against multiple browsers, multiple versions of browser, and browsers running on different operating systems. 要针对多个浏览器运行测试,可以在不同操作系统上运行多个版本的浏览器和浏览器。 To reduce the time it takes for the test suite to complete a test pass. 减少测试套件完成测试通行所需的时间。

然后, 它的原理是什么?

Grid由单个Hub和一个或多个Node组成。两者都是使用selenium-server.jar可执行文件启动的。 hub接收要执行的测试以及应该运行测试的那个浏览器和platform(即WINDOWS,LINUX等)的信息。它知道已经register到hub的每个节点的配置。 它会在满足浏览器 - 平台组合的可用节点中选择一个。一旦选择了一个节点,一个测试发起的Selenium命令就被发送到hub,并将传递到分配给该测试的节点。 该节点运行浏览器,并在该浏览器内针对被测试应用程序执行Selenium命令。

最后, 如何安装使用?

  1. 下载Selenium-Server jar file. 确保安装路径在系统的环境变量path里,这样你才能从command line访问。

2.启动hub节点 在command line里输入:

代码语言:javascript复制
java -jar selenium-server-standalone-<version>.jar -role hub

成功后你会看到如下图:

此命令会帮你自动注册一个hub,default 端口4444. 你可以通过网页http://localhost:4444/grid/console来查看。

3.启动node节点 在command line里输入:

代码语言:javascript复制
java -jar selenium-server-standalone-<version>.jar -role node  -hub http://localhost:4444/grid/register

#注意,你的node节点如果和hub节点不一个地址,你需要把-hub后面的的地址中的 localhost:4444换成真实的hub地址。

成功后,去Hhub节点的http://localhost:4444/grid/console来查看:

注意Node节点的register有多个参数可以选择

代码语言:javascript复制
#register Node的时候加上如下参数, 相当于register了一个Linux上 3.6版本的firefox。

-browser  browserName=firefox,version=3.6,platform=LINUX

4.使用

代码语言:javascript复制
#还记得之前讲过的automation framework吗,我们利用下原来的脚本,仅仅把setup()函数修改一番

运行命令如下:

这就是跑单个用例的情况,如果你希望不同的用例跑在不同的机器上怎么办?

就多注册几个node节点,注册时加上

代码语言:javascript复制
#register Node的时候加上如下参数, 相当于register了一个Linux上 3.6版本的firefox。

-browser  browserName=firefox,version=3.6,platform=LINUX

然后代码里只要在setup 浏览器哪里指定浏览器名称就好了,例如:

代码语言:javascript复制
self.browser = webdriver.Remote(command_executor="http://localhost:4444/wd/hub",

desired_capabilities={

'platform': 'ANY',

'browserName': "chrome"

})

具体哪个node支持哪个browser可以在Hub上通过 http://localhost:4444/grid/console查看

有的同学就问了,selenium grid在多个机器上跑不同浏览器做到了,那么怎么做到并发呢?selenium grid本身不提供并发支持,需要自己写并发的代码,或者我们用pytest来看看如果并发。

代码语言:javascript复制
python -m pytest test --workers 2 --tests-per-worker 2 --html=222.html

结合前图就可以知道,selenium grid会根据你browser的设置去找register到grid上的对应的browser,找到就运行,这样就实现了并发,多机器同时运行。

5.总结 有的人说,我用Jenkins也可以做到同样的事情啊?可以建立多个job,每个job对应一个浏览器不就好了? 的确如此, 但是你想这样一个场景,我想让这个用例运行在chrome 68及以上版本,同时还想有一些用例运行在chrome50以下版本,这样jenkins就麻烦了,需要配置不同的节点来运行。 但是selenium grid却都可把浏览器装在同一个机器上选择版本运行。

总之, selenium gird有自己的应用场景,特别对于大型系统来说,selenium grid应用还比较普遍。 大家可以根据自己情况自行选择。

0 人点赞