Selenium2.0介绍--Selenium Grid,并行启动多个浏览器.

来源:互联网 发布:mac系统版本更新 编辑:程序博客网 时间:2024/05/21 06:58

当你写的selenium的case数达到几十个之后,它的运行时间慢慢的可能就会成为你的一块心病——慢!

怎么办呢?很显然,最有效的降低运行时间就是并行来运行这些case啊。并行运行case需要两个条件,缺一不可。

1. 在运行case端,需要并行的运行。例如写一个多线程/多进程来同时运行多个case。
2. 在Selenium Server端,也要并行的打开多个浏览器窗口,并且各个浏览器窗口之间互不干扰

对于#1,如果是使用JUnit来运行cases,可以使用maven的一个插件:surefire
对于#2,selenium的解决方案是Selenium Grid。

在Selenium2.0之前,Selenium Grid是独立提供服务的。自2.0之后,Selenium Grid被集成到了Selenium Server中了(包含在selenium-server-standalone-.jar中)。

先理解一下Grid是如何工作的?一图胜千言:

Selenium Grid里面有两种角色:Hub和Node。Hub(集线器)是接收所有的请求,然后它会将请求分发给不同的Node,Node来实际驱动浏览器。

1. 启动Grid
使用Selenium Grid与普通的Selenium Server的区别在于是否带上了-role参数。

# 启动Selenium Server
java –jar selenium-server-standalone-2.22.0.jar -port 4444

# 启动Selenium Grid的Hub
java –jar selenium-server-standalone-2.22.0.jar -port 4000 -role hub

# 启动Selenium Grid的Node,其中的-hub参数,是Selenium Grid的Hub的URL
java -jar selenium-server-standalone-2.22.0.jar -port 4001 -role node -hub http://127.0.0.1:4000/grid/register

#显然,可以启动多个Node:
java -jar selenium-server-standalone-2.22.0.jar -port 4002 -role node -hub http://127.0.0.1:4000/grid/register

java -jar selenium-server-standalone-2.22.0.jar -port 4003 -role node -hub http://127.0.0.1:4000/grid/register

......

2. 客户端的调用
对于Selenium Grid,客户端Selenium test的开发也是完全和Selenium Server一样的。不过考虑到并行运行,需要尽量避免tests之间的依赖。

3. 启动Grid的一些重要选项

-host: 如果您的本机只有一个IP地址(ipconfig /all),基本上可以忽略这个选项。如果本机还有其他的IP地址(如多网卡、或安装过虚拟机、或使用了VPN等),那最好是指定一个正确的IP地址(能够让Selenium Hub访问到的IP地址)。

-browser:这个选项是其help帮助中(java -jar selenium-server-standalone.jar -help)是没有的。它的作用是指定这个Node支持了哪些浏览器、平台、可以启动几个浏览器实例等。它是可以重复指定的。例如:-browser browserName=chrome,maxInstances=1 -browser browserName=firefox -browser browserName="internet explorer",其含义是本Node支持启动一个Chrome浏览器,启动默认个数的Firefox(默认个数是5),启动默认个数的IE(默认个数 是1)

4. 启动Grid的批处理脚本示例

当需要启动多个Grid Node的时候,想写一个简单的批处理文件来实现它,发现比想象的要复杂一些,几经周折(MS-DOS批处理的语法真的难用),下面的代码可以参考一下:

file=D:\selenium\selenium-standalone.jar

set port_start=5555
set num=2

start java -jar %file% -port 4000 -role hub

for /l %%i in (1 1 %num%) do (
call:mystart %%i %port_start%
)

goto:eof

:mystart
set /a port=%1+%2

start java -Dwebdriver.chrome.driver=d:\selenium\chromedriver.exe -jar %file% -port %port% -role node -hubhttp://127.0.0.1:4000/grid/register

rem 等待2秒。原因是selenium grid使用启动时间作为sessionid的一部分,如果是同时启动,会导致两个selenium node的session id重复的。
ping 127.0.0.1 -n 3

原创粉丝点击