У меня есть сетка 3 селена. И прямо сейчас у меня есть 1 хаб + 2 узла. (1 локальный узел, один внешний узел). Когда я запускаю свой тест, он выполняет его на локальном узле (открывается 3 браузера).Как выполнить тесты 50/50 параллельно в селеновой сетке
Как и где я должен настроить выполнение теста? Если я хочу запустить все тесты в двух браузерах или если я хочу запустить 50/50 тестов на 2 браузерах? Я приложу свой существующий код ниже.
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"; Какая точка моего теста для конкретного узла, но как я могу настроить тест, указывающий на другой узел, или работающий параллельно на двух узлах?
Почему вы хотите указывать на разные узлы и параллельно выполнять тесты?Что вы ожидаете от этого? Ваш тест должен указывать на URL-адрес Grid, а не на URL-адрес узла. Сетка агностически связана с параллельным или последовательным исполнением. До тех пор, пока для выполнения всех ваших параллельных тестов достаточно узловых слотов, все тесты будут выполняться параллельно. –
Вы имеете в виду, что если вместо указания на узел "String nodeURL =" http://10.11.161.249:5555/wd/hub "" Я могу указать на сетку "http://10.11.161.249:4444", и это будет запустить тест на все доступные узлы автоматически ???? – Anton
Да. Это основная цель сетки. Допустим, у вас есть два узла, каждый из которых может обслуживать 5 сеансов, а затем, если ваши тесты начнут отходить от шести параллельных исполнений, загрузка будет распределена по обеим узлам сеткой (при условии, что оба узла имеют одинаковые поддерживаемые возможности). –