AWS EC2 能否用于远程位置的 运行 自动化 Selenium 测试
Can AWS EC2 be used for running automated Selenium tests on a remote location
在工作中,我们正在 运行在远程位置 (BrowserStack) 进行自动 Selenium 测试。这就是远程 Web 驱动程序的实例化方式,这些测试也使用 testNG
并且项目的设置方式是每个测试将行号传递到此 DriverInit
构造函数中,然后将测试那些是在那一行(代码中没有显示那部分)。问题是我们没有钱在 BrowserStack 上进行 运行 100 次并行测试,我们对此都不熟悉。
阅读后,AWS ec2 似乎是一个不错的选择,但即使在观看视频后我也不知道它是如何工作的。 ec2 是否有能力接受这样的项目并 运行 测试 NG 套件?最简单的方法是什么?我们不需要 BrowserStack 或 SaucyLabs 拥有的任何花哨的东西。我们只需要在后台运行 浏览器测试,但我们不需要有视频记录或任何测试信息。我们真的只需要 CPU 能力来远程 运行 大量并行测试。
理想情况下,如果可能的话,我们希望能够将 URL
替换为另一个 url 和 运行 测试。
public class DriverInit{
public WebDriver driver;
public ChromeOptions chromeOptions;
public DesiredCapabilities caps;
public static final String USERNAME = "my_name";
public static final String AUTOMATE_KEY = "blah_blah_blah";
public static final String URL = "https://" + USERNAME + ":" + AUTOMATE_KEY + "@hub-cloud.browserstack.com/wd/hub";
DriverInit(int row) throws MalformedURLException {
// for BrowserStack testing
caps = new DesiredCapabilities();
caps.setCapability("os", "Windows");
caps.setCapability("os_version", "10");
caps.setCapability("browser", "Chrome");
caps.setCapability("browser_version", "80.0 beta");
caps.setCapability("browserstack.local", "false");
caps.setCapability("browserstack.selenium_version", "3.5.2");
caps.setCapability("name", "selenium test for row " + row);
this.driver = new RemoteWebDriver(new URL(URL), caps);
this.chromeOptions = new ChromeOptions();
String chromeDriverPath = "resources/chromedriver.exe";
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
}
您必须在 AWS 上设置您的项目才能在那里 运行 进行测试。
基本上是这样:设置 OS、安装 chrome、安装 chrome 驱动程序、安装项目、安装项目依赖项。
最好通过某些 CI/CD(例如 Jenkins)
自动完成
到 运行 您在 AWS 或任何其他远程机器上的远程,
- 确保你的机器上有一个 selenium 服务器 运行ning。
- 将您的 AWS 机器的 IP 和端口(selenium 服务器在 运行ning 上)提供给 Web 驱动程序作为 URL(确保您的机器可以访问该 AWS 机器)
这应该可以完成您的工作。下面的代码应该可以工作。
try {
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
ChromeOptions chromOpt = new ChromeOptions();
chromOpt.addArguments("Proxy","null");
chromOpt.setExperimentalOption("useAutomationExtension", false);
chromOpt.addArguments("--disable-dev-shm-usage");
chromOpt.addArguments("--headless");
chromOpt.addArguments("--no-sandbox");
capabilities.setCapability(ChromeOptions.CAPABILITY,chromOpt );
driver = new RemoteWebDriver(new URL("http://" + AWS_SERVER_URL + ":" + AWS_SERVER_PORT + "/wd/hub"),
capabilities);
} catch (Exception e) {
e.printStackTrace();
}
或者,您也可以使用 Selenium Grid。在您的机器上启动一个 Selenium 服务器作为集线器,并在您的 AWS 机器上启动一个服务器作为节点。并且 运行 它。代码将与我粘贴的相似。
在工作中,我们正在 运行在远程位置 (BrowserStack) 进行自动 Selenium 测试。这就是远程 Web 驱动程序的实例化方式,这些测试也使用 testNG
并且项目的设置方式是每个测试将行号传递到此 DriverInit
构造函数中,然后将测试那些是在那一行(代码中没有显示那部分)。问题是我们没有钱在 BrowserStack 上进行 运行 100 次并行测试,我们对此都不熟悉。
阅读后,AWS ec2 似乎是一个不错的选择,但即使在观看视频后我也不知道它是如何工作的。 ec2 是否有能力接受这样的项目并 运行 测试 NG 套件?最简单的方法是什么?我们不需要 BrowserStack 或 SaucyLabs 拥有的任何花哨的东西。我们只需要在后台运行 浏览器测试,但我们不需要有视频记录或任何测试信息。我们真的只需要 CPU 能力来远程 运行 大量并行测试。
理想情况下,如果可能的话,我们希望能够将 URL
替换为另一个 url 和 运行 测试。
public class DriverInit{
public WebDriver driver;
public ChromeOptions chromeOptions;
public DesiredCapabilities caps;
public static final String USERNAME = "my_name";
public static final String AUTOMATE_KEY = "blah_blah_blah";
public static final String URL = "https://" + USERNAME + ":" + AUTOMATE_KEY + "@hub-cloud.browserstack.com/wd/hub";
DriverInit(int row) throws MalformedURLException {
// for BrowserStack testing
caps = new DesiredCapabilities();
caps.setCapability("os", "Windows");
caps.setCapability("os_version", "10");
caps.setCapability("browser", "Chrome");
caps.setCapability("browser_version", "80.0 beta");
caps.setCapability("browserstack.local", "false");
caps.setCapability("browserstack.selenium_version", "3.5.2");
caps.setCapability("name", "selenium test for row " + row);
this.driver = new RemoteWebDriver(new URL(URL), caps);
this.chromeOptions = new ChromeOptions();
String chromeDriverPath = "resources/chromedriver.exe";
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
}
您必须在 AWS 上设置您的项目才能在那里 运行 进行测试。
基本上是这样:设置 OS、安装 chrome、安装 chrome 驱动程序、安装项目、安装项目依赖项。
最好通过某些 CI/CD(例如 Jenkins)
自动完成到 运行 您在 AWS 或任何其他远程机器上的远程,
- 确保你的机器上有一个 selenium 服务器 运行ning。
- 将您的 AWS 机器的 IP 和端口(selenium 服务器在 运行ning 上)提供给 Web 驱动程序作为 URL(确保您的机器可以访问该 AWS 机器)
这应该可以完成您的工作。下面的代码应该可以工作。
try {
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
ChromeOptions chromOpt = new ChromeOptions();
chromOpt.addArguments("Proxy","null");
chromOpt.setExperimentalOption("useAutomationExtension", false);
chromOpt.addArguments("--disable-dev-shm-usage");
chromOpt.addArguments("--headless");
chromOpt.addArguments("--no-sandbox");
capabilities.setCapability(ChromeOptions.CAPABILITY,chromOpt );
driver = new RemoteWebDriver(new URL("http://" + AWS_SERVER_URL + ":" + AWS_SERVER_PORT + "/wd/hub"),
capabilities);
} catch (Exception e) {
e.printStackTrace();
}
或者,您也可以使用 Selenium Grid。在您的机器上启动一个 Selenium 服务器作为集线器,并在您的 AWS 机器上启动一个服务器作为节点。并且 运行 它。代码将与我粘贴的相似。