首页 > 代码库 > selenium Grid(一)

selenium Grid(一)

selenium grid Quick Start

 

selenium-grid是用于设计帮助我们进行分布式测试的工具,其整个结构是由一个hub节点和若干个代理节点组成。hub用来管理各个代理节点的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行。

 

1、启动Selenium-Server

1)下载 selenium-server-standalone-*.jar,地址:http://selenium-release.storage.googleapis.com/index.html?path=2.41/

2)启动selenium server并注册hub  (假设hub服务器机器selenium-server版本为2.41,本机IP为192.32.50.26)

到selenium-server-standalone-*.jar 包放置目录下执行:java -jar selenium-server-standalone-2.41.0.jar -role hub -port 4441  (未指定port时,hub默认4444)

3)本地或者远程机器, 都可以启动多个node

a.本地启动:

默认: java -jar selenium-server-standalone-2.41.0.jar -role node            (默认的注册地址:http://localhost:4444/grid/register,node默认端口:5555)

指定hub: java -jar selenium-server-standalone-2.41.0.jar -role node  -hub http://localhost:4441/grid/register

 b.远程启动:

远程同样需要下载selenium-Server jar包,启动如下:  (假设远程版本为2.29)

java -jar selenium-server-standalone-2.29.0.jar -role node -hub http://192.32.50.26:4441/grid/register -Dwebdriver.chrome.driver=chromedriver29.exe  -browser browserName=chrome  -port 6666

 

2、具体应用

public class RemoteWebDriverDesiredCapTest {
    @Test
    public void myTest() throws MalformedURLException{
        /**
         * 1、本地机器启动了主节点hub    (假設本台机器IP:192.32.50.26,http://localhost:4444/grid/console 查看节点连接情况)
         * java -jar selenium-server-standalone-2.41.0.jar -role hub  (默认端口4444)
         * 2、本地也启动了一个该hub  次节点A   
         * java -jar selenium-server-standalone-2.41.0.jar -role node   
         * (默认的注册地址:http://localhost:4444/grid/register,node默认端口:5555)
         * (具体设置:java -jar selenium-server-standalone-2.41.0.jar -role node -port 5556 -hub http://localhost:4441/grid/register)
         * 3、本机器装有firefox, chrome,所以通过该次节点A, 可以用firefox来运行脚本, 也可以用chrome
         * FF驱动默认在webDriver中了,   而chrome驱动需要自己指定, chromeDriver.exe ,运行chromeDriver(默认使用端口9515)  
         */

//node:java -jar selenium-server-standalone-2.41.0.jar -role node DesiredCapabilities capability = DesiredCapabilities.firefox(); capability.setPlatform(Platform.VISTA); WebDriver driver = new RemoteWebDriver(new URL("http://192.32.50.26:5555/wd/hub"), capability); driver.get("http://www.baidu.com"); System.out.println(driver.getCurrentUrl()); driver.quit(); // node: 直接运行chromedriver.exe时, 通过http://xxx.xxx.xxx.xxx:9515 就可以取得chrome; 或者像 下面指定-Dwebdriver.chrome.driver -port,形式 DesiredCapabilities aDesiredcap =new DesiredCapabilities("chrome","",Platform.VISTA); WebDriver wd = new RemoteWebDriver(new URL("http://localhost:9515"), aDesiredcap); wd.get("https://code.google.com/p/selenium/wiki/Grid2"); System.out.println(wd.getCurrentUrl()); wd.quit(); //node:java -jar selenium-server-standalone-2.41.0.jar -role node -hub http://192.32.50.26:4444/grid/register -Dwebdriver.ie.driver=IEDriverServer.exe -browser browserName=iexplore -port 7776 DesiredCapabilities iDesiredcap =new DesiredCapabilities("iexplore","",Platform.VISTA); WebDriver wdE = new RemoteWebDriver(new URL("http://192.32.50.26:7776/wd/hub"), iDesiredcap); wdE.get("https://code.google.com/p/selenium/wiki/Grid2"); System.out.println(wdE.getCurrentUrl()); wdE.quit(); //用另一台机器作为次节点连接 , (假設IP為: 192.32.52.51 ) //java -jar selenium-server-standalone-2.29.0.jar -role node -hub http://192.32.50.26:4444/grid/register -Dwebdriver.chrome.driver=chromedriver29.exe -browser browserName=chrome -port 6666 DesiredCapabilities chrome =new DesiredCapabilities("chrome","",Platform.XP); WebDriver driverChrome = new RemoteWebDriver(new URL("http://192.32.52.51:6666/wd/hub"), chrome); driverChrome.get("http://www.cnblogs.com/"); driverChrome.quit(); } }

 

3、做成多线程方式

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

如下代码和配置:

1)testcase 代码:

package com.jennifer.test;

import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class GridParallelTests {
    private WebDriver dr;
    DesiredCapabilities desireCap;
    
    @Parameters({ "browser", "nodeUrl"})
    @BeforeMethod
    public void setUp(String browser, String nodeUrl) {
        if (browser.equals("ie")){
            desireCap = DesiredCapabilities.internetExplorer();
        }
        else if (browser.equals("ff"))
            desireCap = DesiredCapabilities.firefox();
        else if (browser.equals("chrome"))
            desireCap = DesiredCapabilities.chrome();
        else
            System.out.println("browser parameter wrong , can only be :ie、 ff、chrome");
        
        String url = nodeUrl + "/wd/hub";
        URL urlInstance = null;
        try {
            urlInstance = new URL(url);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        dr = new RemoteWebDriver(urlInstance, desireCap);
    }

    @Test
    public void test() {
        dr.get("http://www.baidu.com/");
        dr.findElement(By.id("kw1")).sendKeys("selenium");
        dr.findElement(By.id("su1")).click();
        System.out.println("title:" + dr.getTitle());
    }
    @AfterMethod
    public void quit() {
        dr.close();
    }
}

2)testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="Suite1" parallel="tests" thread-count="5">
    <test name="test1">
        <parameter name="browser" value="ff" />
        <parameter name="nodeUrl" value="http://192.32.50.26:5555"/>
        <classes>
            <class name="com.jennifer.test.GridParallelTests"></class>
        </classes>
    </test>

    <test name="test2">
    <!-- java -jar selenium-server-standalone-2.41.0.jar -role node -hub http://192.32.50.26:4444/grid/register -Dwebdriver.chrome.driver=chromedriver29.exe  -browser browserName=chrome  -port 6666 -->
        <parameter name="browser" value="chrome" />
        <parameter name="nodeUrl" value="http://192.32.50.26:6666" />
        <classes>
            <class name="com.jennifer.test.GridParallelTests"></class>
        </classes>
    </test>
    
    <test name="test3">
    <!-- java -jar selenium-server-standalone-2.41.0.jar -role node -hub http://192.32.50.26:4444/grid/register -Dwebdriver.ie.driver=IEDriverServer.exe -browser browserName=iexplore -port 7776 -->
        <parameter name="browser" value="ie" />
        <parameter name="nodeUrl" value="http://192.32.50.26:7776" />
        <classes>
            <class name="com.jennifer.test.GridParallelTests"></class>
        </classes>
    </test>
</suite>