如何让集线器决定在Selenium Grid的并行测试期间执行哪个节点?
问题描述:
我使用所述硒网格上3个不同的设备A,B和C.机器A我GWT Web应用程序的跨浏览器测试(使用TestNG)正在工作,轮毂以及该节点。而另外两台机器B和C被赋予节点的角色。现在如何让集线器决定在Selenium Grid的并行测试期间执行哪个节点?
,在我面前的任务是让中心自行决定哪些节点出了三个节点都提供给它,然后它会执行这些特定节点上的测试。对于例如:如果B机关闭或当前不使用则集线器将不执行,并会继续与机器A和C.
而且测试,其他的任务不是改变代码为每特别是Node,因为根据我在Selenium Grid中的一些知识和经验,这就是我在这里所做的。下面提到的是我在启动集线器后编写的代码以及所有这些机器上的节点。
package testNgPackage;
public class Browser {
//ThreadLocal will provide thread-safe tests
protected ThreadLocal<RemoteWebDriver> threadLocal = null;
@BeforeTest
@Parameters("browser")
public void setup(String browser) throws MalformedURLException{
String nodeMachine1 = "http://xxx/wd/hub";
String nodeMachine2 = "http://yyy/wd/hub";
String nodeMachine3 = "http://zzz/wd/hub";
if(browser.equalsIgnoreCase("chrome")) {
System.setProperty("webdriver.chrome.driver", ".src/Drivers/chromedriver.exe");
DesiredCapabilities capability = null;
capability = DesiredCapabilities.chrome();
capability.setPlatform(Platform.VISTA);
capability.setBrowserName("chrome");
threadLocal = new ThreadLocal<RemoteWebDriver>();
threadLocal.set(new RemoteWebDriver(new URL(nodeMachine1), capability));
}
else if(browser.equalsIgnoreCase("firefox")) {
System.setProperty("webdriver.gecko.driver", ".src/Drivers/geckodriver.exe");
DesiredCapabilities capability = null;
capability = DesiredCapabilities.firefox();
capability.setPlatform(Platform.WIN10);
capability.setBrowserName("firefox");
threadLocal = new ThreadLocal<RemoteWebDriver>();
threadLocal.set(new RemoteWebDriver(new URL(nodeMachine2), capability));
}
}
public WebDriver getDriver() {
return threadLocal.get();
}
@AfterTest
public void closeBrowser(){
getDriver().close();
}
}
要在其上执行测试的代码扩展了这个Browser类,但是编写代码在这里没有用处。下面还提到了testng.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Parallel test suite" parallel="tests" thread-count="2">
<test name="FirefoxTest">
<parameter name="browser" value="Firefox" />
<classes>
<class name="testNgPackage.TestNGClass"/>
</classes>
</test>
<test name="ChromeTest">
<parameter name="browser" value="Chrome" />
<classes>
<class name="testNgPackage.TestNGClass"/>
</classes>
</test>
</suite>
我该怎么做才能优化我的代码并完成任务?
答
当你使用硒电网启动浏览器,你必须通过电网枢纽URL像http://hubIP:hubPort/wd/hub。无需通过所有节点机器的URLS。
所以,请更换线路,
String nodeMachine1 = "http://xxx/wd/hub";
与中心网址如下,
String hubMachine = "http://hubIP:hubPort/wd/hub";
例如,集线器URL应该是http://xx.xx.xx.xx:4444/wd/hub。默认情况下,硒电网将与港口4444
启动,并与
threadLocal.set(new RemoteWebDriver(new URL(hubMachine), capability));
同时更换线
threadLocal.set(new RemoteWebDriver(new URL(nodeMachine1), capability));
,请确保你已经开始在轮毂和正确地注册的节点。
您无需在代码在这里设置的驱动程序属性,并通过它,而你注册节点到集线器一样
>java -Dwebdriver.chrome.driver=<path to driver> -jar <jarname> -role node -hub <hubURL>
你所需要的功能,硒已经包括。你为什么要实现自己。 – yong