AWS EC2可以用于在远程位置运行自动Selenium测试吗

问题描述

在工作中,我们正在远程位置(browserstack)上运行自动Selenium测试。这是实例化远程Web驱动程序的方式,并且这些测试也使用testNG,并且项目的设置方式是,每个测试将行号传递到此DriverInit构造函数中,然后将测试在该行上(该部分未在代码显示)。问题是我们没有钱在browserstack上运行100个并行测试,而我们对此并不熟悉。

阅读后,似乎AWS ec2将是一个不错的选择,但即使在观看视频后,我也不知道它是如何工作的。 ec2是否有能力接受这样的项目并运行testNG套件?最简单的方法是什么?我们不需要browserstack或SaucyLabs拥有的任何奇特的东西。我们只需要在后台运行浏览器测试,但是我们不需要录制视频或任何测试信息。我们确实只需要cpu功能即可远程运行许多并行测试。

理想情况下,我们希望能够将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上设置项目才能在此处运行测试。
基本上就是这样:设置操作系统,安装chrome,安装chromedriver,安装项目,安装项目依赖项。

最好通过某些CI / CD(例如Jenkins)自动完成

,

要在AWS或任何其他远程计算机上远程运行,

  1. 确保计算机上正在运行硒服务器。
  2. 将您的AWS机器的IP和端口(运行硒服务器的端口)作为URL提供给Web驱动程序(确保您的机器可以访问该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 Server作为中心启动,在AWS机器上将Server作为节点。并运行它。代码将与我粘贴的代码相似。