因为我这里有两台机子,我打算这样演示:
一台机子启动一个作为主点节的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/