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:

如果你的程序需要在不用的浏览器,不同的操作系统上测试,而且比较多的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     }
时间: 2024-07-28 14:27:41

selenium 测试框架中使用grid的相关文章

selenium测试框架使用xml作为对象库

之前已经写过一篇: selenium测试框架篇,页面对象和元素对象的管理 上次使用的excel作为Locator对象管理,由于excel处理不够方便,有以下缺点: 不能实现分page 加载Locator对象 不能够实现Locator对象重名 文件比较大,读写速度没有xml快 所以,重新写了使用dom4j操作xml,使用xml管理Locator对象,能够有效解决以上问题 首先,定义Locator文件 <?xml version="1.0" encoding="UTF-8&

selenium测试框架篇,页面对象和元素对象的管理

前期已经做好使用Jenkins做buildhttp://www.cnblogs.com/tobecrazy/p/4529399.html 做自动化框架,不可避免的就是对象库. 有一个好的对象库,可以让整个测试体系: 更容易维护 大大增加代码重用 增加测试系统的稳定性 这里先了解一下我所说的对象库: 所谓的页面对象,是指每一个真是的页面是一个对象. 比如zhihu的登陆页面是一个页面对象,http://www.zhihu.com/#signin 这个页面对象主要包含一个输入邮箱的输入框(一个元素对

selenium测试框架(java) 版本演化一

selenium的自动化测试代码应该如何组织?  如链接:https://code.google.com/p/selenium/wiki/PageObjects  这里提供了一种PageObject的设计思想,并且在百度内部给出了一个感觉比较实用的实现.其组织结构思想如下: Page 封装页面元素,以及页面应提供的服务. 尽量隐藏页面的细节,不要暴露出来. widget 封装Page中的通用的组件. 这里的理念是所有的WebElement都是控件. 通用的页面样式,如导航栏,列表,组合查询框,可

selenium测试框架篇

做自动化框架,不可避免的就是对象库. 有一个好的对象库,可以让整个测试体系: 更容易维护 大大增加代码重用 增加测试系统的稳定性 这里先了解一下我所说的对象库: 所谓的页面对象,是指每一个真是的页面是一个对象. 比如zhihu的登陆页面是一个页面对象,http://www.zhihu.com/#signin 这个页面对象主要包含一个输入邮箱的输入框(一个元素对象),一个输入密码的密码框 一个登陆框.当然,zhihu不止一个页面,有无数页面,每一个页面都可以封装为一个对象.而每个 页面的元素,也可

在测试框架中使用Log4J 2

之前的测试框架:http://www.cnblogs.com/tobecrazy/p/4553444.html 配合Jenkins可持续集成:http://www.cnblogs.com/tobecrazy/p/4529399.html 打log是一个测试框架必备的功能之一,trace测试执行的内容,使测试分析更容易和有规律可循.进而进一步处理测试log,实现自动分析测试结果. 现在java项目写日志一般使用Log4j 2 log4j 2是一个开源的记录log的框架,比log4j 效率更高 更多

java + selenium测试框架(之等待机制) 版本演化二

使用selenium-ide录制,以及直接用selenium-java.jar写测试用例,你会发现它的执行速度很快.大大超过了手工操作的速度,甚至可能也超过了浏览器加载的速度(比浏览器都快?结果就是找不到元素). 如果页面上确实有某个元素,但是在测试时提示NoSuchElementException,那原因有两个:1,你抓取元素的策略错了:2,执行时元素还没加载出来. 在调用了driver.get(url)之后,为了保证元素能够取到正确初始化,需要增加一个等待加载完成的函数,保证页面完成加载.

封装selenium自动化框架中的截图功能

对selenium自带的截图功能进行封装: 以下为封装的代码,自定义一个.py文件即可,图片路径自己设置一个. 1 #coding:utf-8 2 3 class Screen(object): 4 ''' 5 封装的截图类,webdriver自带的get_screenshot_as_file() 6 在使用过程中,注意driver参数的传递 7 ''' 8 def __init__(self, driver): 9 ''' 10 写一个构造函数,有一个参数driver 11 ''' 12 se

Android中测试框架使用简介

测试 好的程序是测出来的. 测试的目的:尽可能多的测试出程序中的bug. 测试分为 黑盒测试:测试业务逻辑 白盒测试:测试逻辑方法.一般是写一段脚本代码,通过脚本代码去调用业务逻辑方法. 按照测试粒度分为: 方法测试:function test   测试某一个方法 单元测试:unit test      测试某一个类或者某一个单元的多个方法 集成测试:integration testv服务器和客户端联合调试,测试的是多个单元. 系统测试 system test      测试的是整个系统的功能,

测试框架mochajs详解

测试框架mochajs详解 章节目录 关于单元测试的想法 mocha单元测试框架简介 安装mocha 一个简单的例子 mocha支持的断言模块 同步代码测试 异步代码测试 promise代码测试 不建议使用箭头函数 钩子函数 钩子函数的描述参数 异步的钩子函数 全局钩子 延迟启动测试 测试用例TODO 仅执行一个用例集/用例 跳过哪些用例集/用例 重新执行用例 动态生成用例 测试时间 测试超时 用例集执行超时 用例执行超时 钩子函数超时 diff差异比较功能 mocha使用命令和参数 mocha