应网友要求写一个用Selenium Grid控制多系统多浏览器并行执行test case的例子。

因为我这里有两台机子,我打算这样演示:

一台机子启动一个作为主点节的hub 和 一个作为次节点的hub(系统windows 浏览器为ie) ip为:192.168.40.24

另一台机子启动两个次节点hub,一个次节点浏览器为firefox,另一个浏览器为chrome (系统为windows),ip为:192.168.40.67

启动各节点hub

启动主节点hub命令:

java -jar selenium-server-standalone-2.24.1.jar -role hub

启动与主节点同一机子的次节点hub命令:

java -jar selenium-server-standalone-2.24.1.jar -role node  -hub http://localhost:4444/grid/register -browser browserName="internet explorer"

启动另外一台机子的两个节点hub命令分别为:

  • 启动firefox的

java -jar selenium-server-standalone-2.24.1.jar   -Dwebdriver.firefox.bin="D:/Program Files/Mozilla Firefox/firefox.exe" -role webdriver  -hub http://192.168.40.24:4444/grid/register -browser browserName=firefox

其中-Dwebdriver.firefox.bin="D:/Program Files/Mozilla Firefox/firefox.exe"这个是传我的firefox浏览器安装地址,不然找不到。

  • 启动chrome的

java -jar selenium-server-standalone-2.24.1.jar   -Dwebdriver.chrome.driver="D:/chromedriver.exe" -role webdriver  -hub http://192.168.40.24:4444/grid/register -port 6666 -browser browserName=chrome

其中-Dwebdriver.chrome.driver="D:/chromedriver.exe",这个是传入我chromedriver.exe的放置地址。端口设为6666,防止和上面firefox的重复。

链接好后,可以在http://localhost:4444/grid/console可以查看到三个子节点的状态。启动详细方法可以参考前面的文章。

Selenium Grid只是提供多系统、多浏览器的执行环境,而不是说任务一个test case丢给它就能并行运行。并行的运行我这里就交给testng了。看下面代码和配制。

 

testcase 代码 和 testng.xml

testcase代码:

  1. package driver;
  2. import java.net.MalformedURLException;
  3. import java.net.URL;
  4. import org.openqa.selenium.By;
  5. import org.openqa.selenium.WebDriver;
  6. import org.openqa.selenium.remote.DesiredCapabilities;
  7. import org.openqa.selenium.remote.RemoteWebDriver;
  8. import org.testng.annotations.AfterMethod;
  9. import org.testng.annotations.BeforeMethod;
  10. import org.testng.annotations.Parameters;
  11. import org.testng.annotations.Test;
  12. public class GridParallelTests {
  13. private WebDriver dr;
  14. DesiredCapabilities test;
  15. String baseUrl;
  16. @Parameters({"browser","nodeUrl","webSite"})
  17. @BeforeMethod
  18. public void setUp(String browser,String nodeUrl,String webSite){
  19. baseUrl = webSite;
  20. if(browser.equals("ie")) test = DesiredCapabilities.internetExplorer();
  21. else if(browser.equals("ff")) test = DesiredCapabilities.firefox();
  22. else if(browser.equals("chrome")) test = DesiredCapabilities.chrome();
  23. else System.out.println("browser参数有误,只能为ie、 ff、chrome");
  24. String url = nodeUrl + "/wd/hub";
  25. URL urlInstance = null;
  26. try {
  27. urlInstance = new URL(url);
  28. } catch (MalformedURLException e) {
  29. // TODO Auto-generated catch block
  30. e.printStackTrace();
  31. System.out.println("实例化url出错,检查一下url格式是否正确,格式为:http://192.168.40.67:5555");
  32. }
  33. dr = new RemoteWebDriver(urlInstance,test);
  34. dr.get(webSite);
  35. }
  36. @Test
  37. public void test(){
  38. dr.get(baseUrl);
  39. dr.findElement(By.id("kw")).sendKeys("selenium");
  40. dr.findElement(By.id("su")).click();
  41. try {
  42. Thread.sleep(10000);
  43. } catch (InterruptedException e) {
  44. // TODO Auto-generated catch block
  45. e.printStackTrace();
  46. }
  47. System.out.println("title:"+dr.getTitle());
  48. }
  49. @AfterMethod
  50. public void quit(){
  51. dr.close();
  52. }
  53. }

testng.xml:

  1. <!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
  2. <suite name="Suite1"  parallel="tests" thread-count="5">
  3. <test name="test1">
  4. <parameter name="browser" value="ff"/>
  5. <parameter name="nodeUrl" value="http://192.168.40.67:5555"/>
  6. <parameter name="webSite" value="http://www.baidu.com"/>
  7. <classes>
  8. <class name="driver.GridParallelTests"></class>
  9. </classes>
  10. </test>
  11. <test name="test2">
  12. <parameter name="browser" value="chrome"/>
  13. <parameter name="nodeUrl" value="http://192.168.40.67:6666"/>
  14. <parameter name="webSite" value="http://www.baidu.com"/>
  15. <classes>
  16. <class name="driver.GridParallelTests"></class>
  17. </classes>
  18. </test>
  19. <test name="test3">
  20. <parameter name="browser" value="ie"/>
  21. <parameter name="nodeUrl" value="http://192.168.40.24:5555"/>
  22. <parameter name="webSite" value="http://www.baidu.com"/>
  23. <classes>
  24. <class name="driver.GridParallelTests"></class>
  25. </classes>
  26. </test>
  27. </suite>

运行testng.xml就可以了。

如果你是用ant把上面的参数传进去也是可以的。我这里就直接简单地放在testng.xml了。

转:Selenium Grid深入学习的更多相关文章

  1. Selenium Grid 学习笔记

    Selenium Grid 学习笔记http://www.docin.com/p-765680298.html

  2. 学习selenium grid记录

    1.找两台Windows系统,一个是A,作为Hub:一个是B,作为Node: 2.在A.B两台电脑分别下载selenium-server-standalone-2.48.0.jar,并放到指定目录 3 ...

  3. 搭建selenium grid简单配置

    1.使用selenium提供的服务端独立jar包 :服务端.客户端都是运行于java7环境. 2.启动hub: hub配置文件如下: Java -jar selenium-server-standal ...

  4. Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试

    最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写.数据驱动管理.测试用例执行管理等一系列工具软件的研发工作,积累了一些经验,在此与大家做一下分享,也算是做 ...

  5. Selenium Grid 运行报错 Exception thrown in Navigator.Start first time ->Error forwarding the new session Empty pool of VM for setup Capabilities

    Selenium Grid 运行报错 : Exception thrown in Navigator.Start first time ->Error forwarding the new se ...

  6. selenium Grid(一)

    selenium grid Quick Start selenium-grid是用于设计帮助我们进行分布式测试的工具,其整个结构是由一个hub节点和若干个代理节点组成.hub用来管理各个代理节点的注册 ...

  7. selenium Grid

    Selenium Grid 的机制是启动一个 hub,然后启动多个 Selenium RC 注册到 hub 上, 当测试请求到 hub 时,hub 会将测试分发给 Selenium RC, Selen ...

  8. selenium grid java 资料

    Grid TestNG: 使用Selenium Grid改进Web应用程序的测试: http://www.ithov.com/server/117464.shtml

  9. Selenium Grid跨浏览器-兼容性测试

    Selenium Grid跨浏览器-兼容性测试 这里有两台机子,打算这样演示: 一台机子启动一个作为主点节的hub 和 一个作为次节点的hub(系统windows 浏览器为ie) ip为:192.16 ...

随机推荐

  1. 纯计算监控(Pure computed observables)

    纯计算监控,在knockout 3.2.0里才有,提供了对性能和内存更好的管理.这是因为纯计算监控不包含对他的依赖的订阅.特点有: 防止内存泄漏 降低计算开销:值不再是observed,是一个不会重新 ...

  2. Java 基于log4j的日志工具类

    对log4j日志类进行了简单封装,使用该封装类的优势在于以下两点: 1.不必在每个类中去创建对象,直接类名 + 方法即可 2.可以很方便的打印出堆栈信息 package com.tradeplatfo ...

  3. Oracle Day3 多行函数、多表查询

    1.多行函数 Sum avg max min count 组函数具有滤空的作用(添加nvl屏蔽该功能) 分组group by 多行分组 分组过滤 where 和分组过滤的区别(having) 分组的增 ...

  4. C# 鼠标事件弹框

    if (e.Button == MouseButtons.Right) { if (gridView1.GetFocusedRowCellValue("color").ToStri ...

  5. Python基础学习笔记---5.输入\输出 I\O文件操作目录

    在很多时候,你会想要让你的程序与用户(可能是你自己)交互.你会从用户那里得到输入,然后打印一些结果.我们可以分别使用 raw_input 和 print 语句来完成这些功能.对于输出,你也可以使用多种 ...

  6. 一般css样式开头公共部分

    @charset "utf-8"; /* CSS Document -- skyren */ body { font-family: "微软雅黑", Arial ...

  7. Astyle编程语言格式化工具的说明

    1.工具->扩展和更新,搜astyle插件,下载安装重启,当前是2.0版本. 2.工具->选项->AStyle Formatter->Edit,填入下面的,点击save,确定. ...

  8. JavaScript shift() 方法

    http://www.w3school.com.cn/jsref/jsref_shift.asp 定义和用法 shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值. 语法 arr ...

  9. form异步无刷新提交,提交后可以显示弹出框,否则弹出框会被刷新不见,使用 preventDefault

    出错点:确认按钮上.加onclick事件.每次点击都会追加给form追加on监听方法.累加on方法,重复提交 suppress_exception:true 阻止异常 (百度推送 jdk) 向下按 p ...

  10. android网络编程之HttpUrlConnection的讲解--GET请求

    1.服务器后台使用Servlet开发,这里不再介绍. 2.测试机通过局域网链接到服务器上,可以参考我的博客:http://www.cnblogs.com/begin1949/p/4905192.htm ...