セレングリッド3をセットアップしました。 今、私は1つのハブ+ 2ノードがあります。 (1つのローカルノード、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();
}
}
は私が
文字列nodeURLは= "http://10.11.161.249:5555/wd/hub" を持っている私のテストでは、私の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>
です。 特定のノードに対する私のテストを指していますが、別のノードを指すようにテストを設定する方法、または2ノードで並列実行する方法はありますか?
なぜ異なるノードを指してテストを並行して実行したいのですか?あなたはそれを行うことで何を返すと期待していますか?あなたのテストはグリッドURLを指し、ノードURLは指していないはずです。グリッドは、並列実行または順次実行については無関心です。すべての並列テストを実行するのに十分なノードスロットがある限り、すべてのテストは並行して実行されます。 –
ノード "String nodeURL =" http://10.11.161.249:5555/wd/hub "" を指すのではなく、グリッド "http://10.11.161.249:4444"を指すことができます。すべての使用可能なノードで自動的にテストを実行しますか? – Anton
はい。これがグリッドの主な目的です。それぞれが5つのセッションに対応できる2つのノードを持っているとします。テストが6つの並列実行を終了すると、両方のノードがグリッドによって両方のノードに分散されます(両方のノードが同じ機能をサポートしていると仮定します)。 –