我有一個硒Grid 3設置。 而現在我有1個集線器+2個節點。 (1個本地節點,一個外部節點)。 當我運行我的測試它在本地節點上執行它(打開3瀏覽器)。如何在Selenium Grid中執行50/50並行測試
如何以及在哪裏設置測試執行?如果我想在2個瀏覽器上運行所有測試,或者如果我想在2個瀏覽器上運行50/50測試? 我將附上我現有的代碼如下。
package com.ParallelTest;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.AfterClass;
public class Framework {
protected WebDriver driver;
@Parameters({ "platform","browser","version", "url" })
@BeforeClass(alwaysRun=true)
public void setup(String platform, String browser, String
version, String url) throws MalformedURLException
{
driver = getDriverInstance(platform, browser, version, url);
}
public static WebDriver getDriverInstance(String platform, String browser, String version, String url)
throws MalformedURLException {
String nodeURL = null;
*// IS this should be a Node or Hub path? Because right now it`s a node path. But if i want to use 2 different nodes? How i can implement it????*
String nodeURL = "http://10.11.161.249:5555/wd/hub";
WebDriver driver = null;
DesiredCapabilities caps = new DesiredCapabilities();
// Platforms
if (platform.equalsIgnoreCase("Windows")) {
caps.setPlatform(Platform.WINDOWS);
}
if (platform.equalsIgnoreCase("MAC")) {
caps.setPlatform(Platform.MAC);
}
// Browsers
if (browser.equalsIgnoreCase("chrome")) {
caps = DesiredCapabilities.chrome();
System.setProperty("webdriver.chrome.driver", "/Users/antonfiliptsov/Desktop/Grid/ChromeDriver/chromedriver");
}
if (browser.equalsIgnoreCase("firefox")) {
caps = DesiredCapabilities.firefox();
System.setProperty("webdriver.gecko.driver","/Users/antonfiliptsov/Desktop/Grid/Firefox/geckodriver");
}
if (browser.equalsIgnoreCase("safari")){
caps = DesiredCapabilities.safari();
}
// Version
caps.setVersion(version);
driver = new RemoteWebDriver(new URL(nodeURL), caps);
// Maximize the browser's window
// driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// Open the Application
driver.get(url);
return driver;
}
@AfterClass
public void afterClass() {
driver.quit();
}
}
這裏是我的TestNG的文件
<suite name="TestSuite" parallel="tests">
<test name="FireFox Test">
<parameters>
<parameter name="platform" value="MAC" />
<parameter name="browser" value="firefox" />
<parameter name="version" value="50.1.0" />
<parameter name="url" value="https://google.com" />
</parameters>
<classes>
<class name="com.test">
</class>
</classes>
</test>
<test name="Chrome Test">
<parameters>
<parameter name="platform" value="MAC" />
<parameter name="browser" value="chrome" />
<parameter name="version" value="55.0.2883.87" />
<parameter name="url" value="https://google.com" />
</parameters>
<classes>
<class name="com.test">
</class>
</classes>
</test>
<test name="Chrome Test 1">
<parameters>
<parameter name="platform" value="MAC" />
<parameter name="browser" value="chrome" />
<parameter name="version" value="55.0.2883.87" />
<parameter name="url" value="https://google.com" />
</parameters>
<classes>
<class name="com.test">
</class>
</classes>
</test>
</suite>
在我的測試,我有字符串的nodeURL = 「http://10.11.161.249:5555/wd/hub」; 哪些指向特定節點的測試,但我如何設置測試指向不同節點,還是在2個節點上並行運行?
你爲什麼要指向不同的節點並運行測試?你通過這樣做期待什麼作爲回報?您的測試應該指向網格網址,而不是節點網址。網格對並行或順序執行是不可知的。只要有足夠的節點插槽可用於運行所有並行測試,所有測試都將並行執行。 –
你的意思是,如果不是指向節點「String nodeURL =」http://10.11.161.249:5555/wd/hub「」 我可以指向網格「http://10.11.161.249:4444」,它會在所有可用節點上自動運行測試? – Anton
是的。這是電網的主要目的。假設您有兩個節點,每個節點可以提供5個會話,那麼如果您的測試啓動了6次並行執行,那麼負載將通過網格分佈在兩個節點上(假設兩個節點都具有相同的支持功能) –