天天看点

Selenium Grid深入学习

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

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

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

  启动各节点hub

  启动主节点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的重复。

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

  testcase 代码 和 testng.xml

  testcase代码:

package driver;

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 test;

string baseurl;

@parameters({"browser","nodeurl","website"})

@beforemethod

public void setup(string browser,string nodeurl,string website){

baseurl = website;

if(browser.equals("ie")) test = desiredcapabilities.internetexplorer();

else if(browser.equals("ff")) test = desiredcapabilities.firefox();

else if(browser.equals("chrome")) test = desiredcapabilities.chrome();

else system.out.println("browser参数有误,只能为ie、 ff、chrome");

string url = nodeurl + "/wd/hub";

url urlinstance = null;

try {

urlinstance = new url(url);

} catch (malformedurlexception e) {

// todo auto-generated catch block

e.printstacktrace();

system.out.println("实例化url出错,检查一下url格式是否正确,格式为:http://192.168.40.67:5555");

}

dr = new remotewebdriver(urlinstance,test);

dr.get(website);

@test

public void test(){

dr.get(baseurl);

dr.findelement(by.id("kw")).sendkeys("selenium");

dr.findelement(by.id("su")).click();

thread.sleep(10000);

} catch (interruptedexception e) {

system.out.println("title:"+dr.gettitle());

@aftermethod

public void quit(){

dr.close();

 testng.xml:

<!doctype suite system "http://beust.com/testng/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.168.40.67:5555"/>

<parameter name="website" value="http://www.baidu.com"/>

<classes>

<class name="driver.gridparalleltests"></class>

</classes>

</test>

<test name="test2">

<parameter name="browser" value="chrome"/>

<parameter name="nodeurl" value="http://192.168.40.67:6666"/>

<test name="test3">

<parameter name="browser" value="ie"/>

<parameter name="nodeurl" value="http://192.168.40.24:5555"/>

</suite>

  运行testng.xml就可以了。

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

最新内容请见作者的github页:http://qaseven.github.io/