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

当你写的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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
.确认(verifation)和断言(assert)有什么区别? 确认:当测试中的一个用例存在错误时,系统将会继续运行这些测试 断言:当测试中的一个用例存在错误时,系统将会退出当前用例 总而言之,确认和断言的不同在于,当出现错误情况之后,系统将会如何处理。 .test case 和testsuite的区别? test case是一个用例 test suite是一组用例 7.selenium IDE, selenium core, selenium core hta, selenium rc四者的概念以及它们之间的区别? selenium IDE(集成开发环境)。它是一个firefox的插件,可以录制、回放并编辑测试脚本 selenium Core(核心)。这是符合断言机制,由测试套件执行的平台。它是整个测试机制的核心部分,由纯javaScript代码组成 selenium Core Hta.这是针对IE设计的执行平台,运行于IE的最高字全级别之上。 selenium Remote Control(远程控制):它是一个代理与控制端,可代替selenium core/selenium DIE的客户端,并支持多语言 8.能不能在IE中录制脚本吗? 不能,只能在firefox中安装selenium IDE,而只有selenium IDE才存在录制的功能。 如果想测试一些,不能在firefox中正常显示的程序,则只有安装selenium RC,然后自己编写测试脚本,只有这样,脚本才能在ie中运行。 12.怎样安装多窗口模型? (1)启动selenium-server时,输入以下的命令:java-jar selenium-server.jar -multiwindow。则会在两个窗口中显示运行结果 (2)启动selenium-server时,输入以下的命令:java -jar selenium-server.jar -singlewindow。则会在一个窗口中显示运行结果 15.怎样访问变量? ${变量名} 16.在录制的过程中,遇到了提示框的话,要怎样处理才能在正常的回放? 17.录制到邮件的时候,不能正常录制,要如何处理呢? 录制的时候,首先要指定要框架,然后再输入文本。 例如:邮件通过firebug定位为: 在selenium ide中则需要手动的输入以下的内容: 再输入一条以下的命令:selectFrame relative=top 则,此时的脚本就能正常的运行了。 18.录制到组件的时候,不能正常录制,要怎样处理? 例如:上传附件(以及其它一些要上传的东西),刚发现附件并不是不能录制,而是你在界面中的定位不是很清楚,selenium不能识别。 19.录制时,会跳出多个窗口,此时要怎样处理? 存在四种解决方法,可以参考http://www.boobooke.com/bbs/viewthread.php?tid=41824&highlight=selenium中的第七集 具体方法如下:(1)java中可用如下的代码:String[] titles =selenium.getAllWindowTitles(); //得到所有窗口的标题 selenium.selectWindow("title="+titles[titles.length-1]); //选择最后打开的一个窗口 selenium.close(); //关闭最后打开的一个窗口 selenium.selectWindow("null"); //重新聚集在最开始的一个窗口(只有两个窗口的时候) (2)java中可用如下的代码:selenium.click("link=????"); 换成如下的两行代码 String url = selenium.getAttribute(link=????@href); selenium.open(url); 注:此方法也存在一定的缺陷,就是不能验证click点击事件是否正确。 (3)利用javascript去掉原代码中的target="_blank"的属性(目前为止还不清楚) (4)这种方法不清楚,看的不是很懂 20.什么是window
您可以使用 Selenium Grid 进行远程连接和分布式测试。Selenium GridSelenium 的组件,它允许您在不的机器上同时运行测试用例,并将测试任务分配给不同的浏览器实例。 要使用 Selenium Grid,您需要按照以下步骤进行操作: 1. 安装 Java Development Kit(JDK):Selenium Grid 是使用 Java 编写的,因此您需要安装 JDK。 2. 下载 Selenium Server:您可以从 Selenium 官方网站下载最新版本的 Selenium Server JAR 文件。 3. 启动 Selenium Hub:Selenium Hub 是 Grid 的中心节点,它负责接收来自客户端的测试请求并将其分配给可用的节点。您可以使用以下命令启动 Selenium Hub: ``` java -jar selenium-server-standalone.jar -role hub ``` 4. 启动 Selenium Node:Selenium Node 是 Grid 的节点,它负责实际运行测试用例。您可以在不同的机器启动多个 Selenium Node,以便并行运行测试。您可以使用以下命令启动 Selenium Node: ``` java -Dwebdriver.chrome.driver=chromedriver -jar selenium-server-standalone.jar -role node -hub http://localhost:4444/grid/register ``` 其中,`-Dwebdriver.chrome.driver` 指定 Chrome 驱动程序的路径,`-hub` 指定 Selenium Hub 的 URL。 5. 运行测试用例:现在您可以在客户端中编写测试用例,并将其配置为通过 Selenium Grid 运行。在测试用例中,您需要指定远程节点的 URL,以便将测试任务分配给正确的节点。 以下是一个使用 Python 和 Selenium 的示例代码片段,用于远程连接到 Selenium Grid 并运行测试: ```python from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities # 配置远程节点的 URL remote_url = "http://<node_ip>:<node_port>/wd/hub" # 配置所需的浏览器 capabilities = DesiredCapabilities.CHROME.copy() capabilities['platform'] = 'WINDOWS' # 连接到远程节点 driver = webdriver.Remote(remote_url, desired_capabilities=capabilities) # 执行测试操作 driver.get("https://www.example.com") ``` 请将 `<node_ip>` 替换为远程节点的 IP 地址,`<node_port>` 替换为远程节点的端口号。 这样,您就可以使用 Selenium Grid 进行远程连接浏览器并进行分布式测试了。希望对您有帮助!如有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值