当你写的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 -hub
http://127.0.0.1:4000/grid/register
rem 等待2秒。原因是selenium grid使用启动时间作为sessionid的一部分,如果是同时启动,会导致两个selenium node的session id重复的。
ping 127.0.0.1 -n 3
当你写的selenium的case数达到几十个之后,它的运行时间慢慢的可能就会成为你的一块心病——慢!怎么办呢?很显然,最有效的降低运行时间就是并行来运行这些case啊。并行运行case需要两个条件,缺一不可。1. 在运行case端,需要并行的运行。例如写一个多线程/多进程来同时运行多个case。2. 在Selenium Server端,也要并行的打开多个浏览器窗口,并且各个浏览器窗口
从邮件中下载并安装google-chrome-stable_current_amd64.deb
$sudo dpkg -i google-chrome-stable_current_amd64.deb
使用chrome://version/ 查看chr...
实现原理
selenium
grid
+多线程(持续更新中)
1
selenium
grid
工作原理(转自虫师)
selenium
grid
是勇于设计帮助我们进行分布式测试的工具,其整体结构是由一个hub节点和若干个代理节点组成,hub用来管理各个代理节点的注册和状态信息,并且接受远程客户端代码与直接调用
selenium
-server是一样的.
ps:如果是在本机执行,记得在
启动
hub的时
1.一开始用的
selenium
-server-standalone-3.1.0一直不成功,也没有关注版本的对应关系
报错(Error forwarding the new session Empty pool of VM for setup Capabilities)
解决方案:取了最新版本
selenium
-server-standalone-3.9.1
2.org.openqa.
selenium
...
背景:使用到
grid
做分发,已经有两周,运行较稳定,分发也健壮,不知道是不是要因为运行量小,服务器也没出问题,稳定到两周后,发现分发到A服务器(10.40.2.113)和B服务器(10.40.2.114)这两台机器本地连接不上10.40.6.24:3306这个数据库,不知道有谁更改过服务器什么配置没,导致现在有问题
最开始一直被自己带入到一个误区中,只为解决服务器是否能正常...
# 情况一
selenium
.common.exceptions.WebDriverException: Message: unknown error: cannot activate web view
# 情况二
selenium
.common.exceptions.InvalidSessionIdExc
如果你对
Selenium
自动化测试已经非常熟悉,你仅仅需要一个快速上手来使程序运行起来。本章节的内容能满足不同的技术层次,但是如果你仅仅需要一个可以快速上手的指引,那么就显得有点多。如果是这样,你可以参考
Selenium
Wiki 的相关文章。
什么是
Selenium
-
Grid
?
Selenium
-
Grid
允许你在多台机器的
多个
浏览器
上
并行
的进行测试,也...