转载

selenium 测试框架中使用grid

之前的测试框架: http://www.cnblogs.com/tobecrazy/p/4553444.html

配合Jenkins可持续集成: http://www.cnblogs.com/tobecrazy/p/4529399.html

在测试框架中使用Log4J 2 : http://www.cnblogs.com/tobecrazy/p/4557592.html

首先介绍一下grid ,selenium grid 是一种执行测试用例时使用的包含不同平台(windows、Linux、Android)的框架,并且

这些平台是由一个中心点控制,这个中心点称之为HUB,而那些不同的平台称之为NODE

其结构如下:

selenium 测试框架中使用grid

为什么使用selenium grid:

如果你的程序需要在不用的浏览器,不同的操作系统上测试,而且比较多的case需要多线程远程执行,那么一个比较好的solution就是使用grid.selenium-grid是用于设计帮助我们进行分布式测试的工具,其整个结构是由一个hub节点和若干个代理节点组成。hub用来管理各个代理节点的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行。

怎么使用:

首先启用HUB:

在A机器下载:selenium standalone 4.6:http://pan.baidu.com/s/1qWE7SD2

然后创建HUB.bat

内容为:

1 java -jar selenium-server-standalone-2.46.0.jar -role hub

其默认监听端口4444,默认IP localhost  如果要修改,只需要加-port 参数和-Hubhost

java -jar selenium-server-standalone-2.46.0.jar -role hub  -port 1235 -Hubhost 192.168.2.45

接下来在B机添加node ,创建Node.bat,这里使用的是默认的Hubhost Ip 和端口

1 java -jar selenium-server-standalone-2.46.0.jar -role node -hub http://localhost:4444/grid/register

为了使用chrome和IE driver,我们需要这样设置

1 java -Dwebdriver.ie.driver="C:/Users/workspace/Demo/webDriver/IEDriverServer.exe" -Dwebdriver.chrome.driver="C:/Users/workspace/Demo/webDriver/chromedriver.exe" -jar selenium-server-standalone-2.46.0.jar -role node -hub http://localhost:4444/grid/register

分别启动这两个bat

若使用remote Driver,需要设置这样的参数

DesiredCapabilities capability = DesiredCapabilities.firefox();         WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);         capability.setBrowserName("firefox" );          capability.setVersion("3.6");

所以我们索性创建一个bean

 1 /**  2  *   3  */  4 package com.dbyl.libarary.utils;  5   6 /**  7  * for remote browser bean  8  * @author Young  9  * 10  */ 11 public class RemoteBrowserBean { 12     private String browserName; 13     private String version; 14     private String[] platform; 15     private String hubURL; 16     public String getBrowserName() { 17         return browserName; 18     } 19      20     public RemoteBrowserBean() 21     { 22         this.browserName="firefox"; 23         this.version="38"; 24         this.platform=new String[]{"VISTA", "windows 7"}; 25         this.hubURL="http://localhost:4444/wd/hub"; 26          27     } 28      29     public RemoteBrowserBean(String browser) 30     { 31         this.browserName=browser; 32         this.version="42"; 33         this.platform=new String[]{"VISTA", "windows 7"}; 34         this.hubURL="http://localhost:4444/wd/hub"; 35          36     } 37      38     public void setBrowserName(String browserName) { 39         this.browserName = browserName; 40     } 41     public String getVersion() { 42         return version; 43     } 44     public void setVersion(String version) { 45         this.version = version; 46     } 47   48      49     public String[] getPlatform() { 50         return platform; 51     } 52  53     public void setPlatform(String[] platform) { 54         this.platform = platform; 55     } 56  57     public String getHubURL() { 58         return hubURL; 59     } 60     public void setHubURL(String hubURL) { 61         this.hubURL = hubURL; 62     } 63      64  65 }

然后在DriverFactory里创建getRemoteDriver

 1 /**  2      * This method will create RemoteWebdriver  3      * @author Young  4      * @param remoteBrowserBean  5      * @return WebDriver  6      */  7     public static WebDriver getRemoteDriver(RemoteBrowserBean remoteBrowserBean) {  8         DesiredCapabilities capability = null;  9         if (remoteBrowserBean.getBrowserName().contains("firefox")) { 10             capability = DesiredCapabilities.firefox(); 11         } else if (remoteBrowserBean.getBrowserName().contains("chrome")) { 12             capability = DesiredCapabilities.chrome(); 13         } 14  15         WebDriver driver = null; 16         try { 17             driver = new RemoteWebDriver( 18                     new URL(remoteBrowserBean.getHubURL()), capability); 19         } catch (MalformedURLException e) { 20             e.printStackTrace(); 21         } 22         capability.setBrowserName(remoteBrowserBean.getBrowserName()); 23         capability.setVersion(remoteBrowserBean.getVersion()); 24         capability.setCapability(remoteBrowserBean.getPlatform()[0], 25                 remoteBrowserBean.getPlatform()[1]); 26         driver.manage().window().maximize(); 27         return driver; 28     }

接下来就可以在case里边使用

1 @BeforeClass(alwaysRun=true) 2     public void beforeTest() 3     { 4         driver = DriverFactory.getRemoteDriver(new RemoteBrowserBean("chrome")); 5     }
正文到此结束
Loading...