(一)介绍:
Grid的功能:
- 并行执行
- 通过一个中央管理器统一控制用例在不同环境、不同浏览器下运行
- 灵活添加变动测试机
(二)快速开始
这个例子将介绍如何使用selenium2.0的grid,并且注册一个WebDriver节点。如何使用java调用grid。这里Hub和节点都跑在同一台机器上面,但是如有你需要的话可以复制selenium-server-standalone到分布式机器上去实现。
注:
selenium-server-standalone的jar
包中已经包含了
grid
,
WebDriver
和
RC
。
Ant
在
2.0
版本就不被需要。
Step1:Start the hub
Hub作为中央节点,他将接收所有的测试请求,然后分发到各个测试节点上。打开控制台,进入selenium-server-standalone所在目录,输入以下指令:
<wbr style="color:rgb(68,68,68)"><span style="color:rgb(68,68,68)">Step2: Start the node</span> <div style="color:rgb(68,68,68)">不管你是为WebDriver启动一个grid还是为RC启动,都只需要通过相同的selenium-server-standalone包启动就可以了:</div> <div style="color:rgb(68,68,68)"> <div> <pre><p><span style="color:rgb(0,0,0)">java</span><span style="color:rgb(102,102,0)">-</span><span style="color:rgb(0,0,0)">jar selenium</span><span style="color:rgb(102,102,0)">-</span><span style="color:rgb(0,0,0)">server</span><span style="color:rgb(102,102,0)">-</span><span style="color:rgb(0,0,0)">standalone</span><span style="color:rgb(102,102,0)">-</span><span style="color:rgb(0,102,102)">2.20</span><span style="color:rgb(0,102,102)"><span style="color:rgb(102,102,0)">.</span></span><span style="color:rgb(0,102,102)">0.jar</span><span style="color:rgb(0,0,0)"></span><span style="color:rgb(102,102,0)">-</span><span style="color:rgb(0,0,0)">role node </span><span style="color:rgb(102,102,0)">-</span><span style="color:rgb(0,0,0)">hub http</span><span style="color:rgb(102,102,0)">:</span><span style="color:rgb(136,0,0)">//hub</span><span style="color:rgb(136,0,0)">host:4444/grid/register</span></p></pre> </div> <p align="left"><span style="font-family:Monaco; font-size:12px; color:#ff0000">注:此处的hubhost为启动Selenium Grid hub所在机器的IP。</span></p> <div><br></div> </div> <span style="color:rgb(68,68,68)">(三)使用grid执行用例</span> <div style="color:rgb(68,68,68)"> <p align="left">现在我们已经启动了一个grid,那么我需要访问这个grid来执行我们的用例,对于RC用例,我们将继续使用DefaultSelenium对象来跟hub进行通信:</p> <pre><pre><span style="color:rgb(102,0,102)">Selenium</span><span style="color:rgb(0,0,0)"> selenium </span><span style="color:rgb(102,102,0)">=</span><span style="color:rgb(0,0,136)">new</span><span style="color:rgb(102,0,102)">DefaultSelenium</span><span style="color:rgb(102,102,0)">(</span><span style="color:rgb(0,136,0)">"</span><span style="color:rgb(0,136,0)">hub</span><span style="color:rgb(0,136,0)">host"</span><span style="color:rgb(102,102,0)">,</span><span style="color:rgb(0,102,102)">4444</span><span style="color:rgb(102,102,0)">,</span><span style="color:rgb(0,136,0)">"</span><span style="color:#339966"><span style="color:rgb(0,136,0)">*</span></span><span style="color:#339966"><span style="color:rgb(0,136,0)">firefox</span></span><span style="color:rgb(0,136,0)">"</span><span style="color:rgb(102,102,0)">,</span><span style="font-size:12px; color:#339966"><span style="color:rgb(0,136,0)">"</span></span><span style="color:#339966"><span style="color:rgb(0,136,0)">http</span><span style="color:rgb(0,136,0)">:</span></span><span style="color:#339966"><span style="color:rgb(0,136,0)">//www.google.com"</span></span><span style="color:rgb(136,0,0)"><span style="color:rgb(102,102,0)">);</span></span></pre></pre> <p align="left">而对于WebDriver用例,我们需要使用RemoteWebDriver和DesiredCapabilities对象来声明用例需要使用的浏览器,版本和平台。声明我们需要测试执行的浏览器:</p> <pre><p><span style="color:rgb(102,0,102)">DesiredCapabilities</span><span style="color:rgb(0,0,0)">capability</span><span style="color:rgb(102,102,0)">=</span><span style="color:rgb(0,0,0)"></span><span style="color:rgb(102,0,102)">DesiredCapabilities</span><span style="color:rgb(102,102,0)">.</span><span style="color:rgb(0,0,0)">firefox</span><span style="color:rgb(102,102,0)">();</span> </p></pre> <p align="left">将capability加载到RemoteWebDriver对象:</p> <pre><pre><p><span style="color:rgb(102,0,102)">WebDriver</span><span style="color:rgb(0,0,0)"> driver </span><span style="color:rgb(102,102,0)">=</span><span style="color:rgb(0,0,136)">new</span><span style="color:rgb(102,0,102)">RemoteWebDriver</span><span style="color:rgb(102,102,0)">(</span><span style="color:rgb(0,0,136)">new</span><span style="color:rgb(0,0,0)"> URL</span><span style="color:rgb(102,102,0)">(</span><span style="color:#339966"><span style="color:rgb(0,136,0)">"http://localhost:4444/wd/hub"</span></span><span style="color:rgb(102,102,0)">),</span><span style="color:rgb(0,0,0)"> capability</span><span style="color:rgb(102,102,0)">);</span></p></pre><p align="left">通过这些步骤,RemoteWebDriver会把用例中的操作发送给hub,hub则根据capability将用例指派到特定的测试节点(即向hub注册的node)上。</p><p align="left"><span>同样如果测试节点机器设置了</span><span>capabilities</span><span>的值,那么我们需要在</span><span>WebDriver</span><span>对象中进行相同的设置,才能被访问到。</span></p><p align="left">例如:A测试机节点通过下列项进行注册到hub:</p><pre><pre><span style="color:rgb(102,102,0)">-</span><span style="color:rgb(0,0,0)">browser browserName</span><span style="color:rgb(102,102,0)">=</span><span style="color:#339966"><span style="color:rgb(0,0,0)">firefox</span></span><span style="color:rgb(102,102,0)">,</span><span style="color:rgb(0,0,0)">version</span><span style="color:rgb(102,102,0)">=</span><span style="color:#339966"><span style="color:rgb(0,102,102)">3.6</span></span><span style="color:rgb(102,102,0)">,</span><span style="color:rgb(0,0,0)">platform</span><span style="color:rgb(102,102,0)">=</span><span style="color:#339966"><span style="color:rgb(0,0,0)">LINUX</span></span></pre></pre><p align="left">那么它将被这样的用例访问到:</p><pre><p><span style="color:rgb(0,0,0)">capability</span><span style="color:rgb(102,102,0)">.</span><span style="color:rgb(0,0,0)">setBrowserName</span><span style="color:rgb(102,102,0)">(</span><span style="color:#339966"><span style="color:rgb(0,136,0)">"</span></span><span style="color:#339966"><span style="color:rgb(0,136,0)">firefox</span><span style="color:rgb(0,136,0)">"</span></span><span style="color:rgb(102,102,0)">);</span> <span style="color:rgb(0,0,0)">capability</span><span style="color:rgb(102,102,0)">.</span><span style="color:rgb(0,0,0)">setPlatform</span><span style="color:rgb(102,102,0)">(</span><span style="color:#339966"><span style="color:rgb(0,136,0)">"</span></span><span style="color:#339966"><span style="color:rgb(0,136,0)">LINUX"</span></span><span style="color:rgb(102,102,0)">);</span><span style="color:rgb(0,0,0)"> </span> <span style="color:rgb(0,0,0)">capability</span><span style="color:rgb(102,102,0)">.</span><span style="color:rgb(0,0,0)">setVersion</span><span style="color:rgb(102,102,0)">(</span><span style="color:#339966"><span style="color:rgb(0,136,0)">"</span></span><span style="color:#339966"><span style="color:rgb(0,136,0)">3.6"</span></span><span style="color:rgb(102,102,0)">);</span></p></pre><p align="left">同样他也会匹配:</p><pre><p><span style="color:rgb(0,0,0)">capability</span><span style="color:rgb(102,102,0)">.</span><span style="color:rgb(0,0,0)">setBrowserName</span><span style="color:rgb(102,102,0)">(</span><span style="color:#339966"><span style="color:rgb(0,136,0)">"</span></span><span style="color:#339966"><span style="color:rgb(0,136,0)">firefox</span><span style="color:rgb(0,136,0)">"</span></span><span style="color:rgb(102,102,0)">);</span> <span style="color:rgb(0,0,0)">capability</span><span style="color:rgb(102,102,0)">.</span><span style="color:rgb(0,0,0)">setVersion</span><span style="color:rgb(102,102,0)">(</span><span style="color:#339966"><span style="color:rgb(0,136,0)">"</span></span><span style="color:#339966"><span style="color:rgb(0,136,0)">3.6"</span></span><span style="color:rgb(102,102,0)">);</span> </p></pre>可见node也是接受模糊匹配的。<span>如果</span><span>capabilities</span><span>没有被指定,那么这个用例将被忽略。同样如果指定的</span><span>capabilities</span><span>不存在,则这个用例将不能运行。</span></pre> <pre><span style="font-family:宋体">(四)配置节点:</span></pre> <pre><p align="left">默认情况下,支持11款浏览器:5个FF,5个Chrome,1个IE。默认的最大并发数为5。不过我们可以通过命令行来进行更改。</p><pre><pre><span style="color:rgb(102,102,0)">-</span><span style="color:rgb(0,0,0)">browser browserName</span><span style="color:rgb(102,102,0)">=</span><span style="color:rgb(0,0,0)">firefox</span><span style="color:rgb(102,102,0)">,</span><span style="color:rgb(0,0,0)">version</span><span style="color:rgb(102,102,0)">=</span><span style="color:rgb(0,102,102)">3.6</span><span style="color:rgb(102,102,0)">,</span><span style="color:rgb(0,0,0)">maxInstances</span><span style="color:rgb(102,102,0)">=</span><span style="color:rgb(0,102,102)">5</span><span style="color:rgb(102,102,0)">,</span><span style="color:rgb(0,0,0)">platform</span><span style="color:rgb(102,102,0)">=</span><span style="color:rgb(0,0,0)">LINUX</span></pre></pre><p align="left">以上配置了一个Linux测试机节点,且可以同时并发5个FF3.6浏览器。</p><p align="left">如果你的测试机上存在多个版本的浏览器,那么也可以通过配置具体浏览器的执行文件的路径来配置多个版本:</p><pre><pre><span style="color:rgb(102,102,0)">-</span><span style="color:rgb(0,0,0)">browser browserName</span><span style="color:rgb(102,102,0)">=</span><span style="color:rgb(0,0,0)">firefox</span><span style="color:rgb(102,102,0)">,</span><span style="color:rgb(0,0,0)">version</span><span style="color:rgb(102,102,0)">=</span><span style="color:rgb(0,102,102)">3.6</span><span style="color:rgb(102,102,0)">,</span><span style="color:rgb(0,0,0)">firefox_binary</span><span style="color:rgb(102,102,0)">=</span><span style="color:rgb(0,136,0)">/home/</span><span style="color:rgb(0,0,0)">myhomedir</span><span style="color:rgb(102,102,0)">/</span><span style="color:rgb(0,0,0)">firefox36</span><span style="color:rgb(102,102,0)">/</span><span style="color:rgb(0,0,0)">firefox</span><span style="color:rgb(102,102,0)">,</span><span style="color:rgb(0,0,0)">maxInstances</span><span style="color:rgb(102,102,0)">=</span><span style="color:rgb(0,102,102)">3</span><span style="color:rgb(102,102,0)">,</span><span style="color:rgb(0,0,0)">platform</span><span style="color:rgb(102,102,0)">=</span><span style="color:rgb(0,0,0)">LINUX </span><span style="color:rgb(102,102,0)">-</span><span style="color:rgb(0,0,0)">browser browserName</span><span style="color:rgb(102,102,0)">=</span><span style="color:rgb(0,0,0)">firefox</span><span style="color:rgb(102,102,0)">,</span><span style="color:rgb(0,0,0)">version</span><span style="color:rgb(102,102,0)">=</span><span style="color:rgb(0,102,102)">4</span><span style="color:rgb(102,102,0)">,</span><span style="color:rgb(0,0,0)">firefox_binary</span><span style="color:rgb(102,102,0)">=</span><span style="color:rgb(0,136,0)">/home/</span><span style="color:rgb(0,0,0)">myhomedir</span><span style="color:rgb(102,102,0)">/</span><span style="color:rgb(0,0,0)">firefox4</span><span style="color:rgb(102,102,0)">/</span><span style="color:rgb(0,0,0)">firefox</span><span style="color:rgb(102,102,0)">,</span><span style="color:rgb(0,0,0)">maxInstances</span><span style="color:rgb(102,102,0)">=</span><span style="color:rgb(0,102,102)">4</span><span style="color:rgb(102,102,0)">,</span><span style="color:rgb(0,0,0)">platform</span><span style="color:rgb(102,102,0)">=</span><span style="color:rgb(0,0,0)">LINUX</span></pre></pre><p align="left"><span style="color:#ff0000">注:firefox_binary为节点测试机上具体的FF启动文件</span></p></pre> </div> </wbr>