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 或任何其他远程机器上的远程,

  1. 确保你的机器上有一个 selenium 服务器 运行ning。
  2. 将您的 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 机器上启动一个服务器作为节点。并且 运行 它。代码将与我粘贴的相似。