selenium Grid(一)

selenium grid Quick Starthtml

 

selenium-grid是用於設計幫助咱們進行分佈式測試的工具,其整個結構是由一個hub節點和若干個代理節點組成。hub用來管理各個代理節點的註冊和狀態信息,而且接受遠程客戶端代碼的請求調用,而後把請求的命令再轉發給代理節點來執行。java

 

一、啓動Selenium-Servernode

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

2)啓動selenium server並註冊hub  (假設hub服務器機器selenium-server版本爲2.41,本機IP爲192.32.50.26)chrome

到selenium-server-standalone-*.jar 包放置目錄下執行:java -jar selenium-server-standalone-2.41.0.jar -role hub -port 4441  (未指定port時,hub默認4444)api

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

 

二、具體應用

public class RemoteWebDriverDesiredCapTest {
    @Test
    public void myTest() throws MalformedURLException{
        /**
         * 一、本地機器啓動了主節點hub    (假設本臺機器IP:192.32.50.26,http://localhost:4444/grid/console 查看節點鏈接狀況)
         * java -jar selenium-server-standalone-2.41.0.jar -role hub  (默認端口4444)
         * 二、本地也啓動了一個該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)
         * 三、本機器裝有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(); } }

 

三、作成多線程方式

 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>
相關文章
相關標籤/搜索