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



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

阅读后,AWS ec2似乎是一个不错的选择,但即使在看了视频后,我也不知道它是如何工作的。ec2有能力接受这样的项目并运行testNG套件吗?最简单的方法是什么?我们不需要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或任何其他远程机器上远程运行,

  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();
}

或者,您也可以使用SeleniumGrid。在您的机器上启动Selenium服务器作为集线器,在AWS机器上启动服务器作为节点。并运行它。代码将与我粘贴的代码相似。

您必须在AWS上设置项目才能在那里运行测试
所以基本上:设置操作系统,安装chrome,安装chromedriver,安装项目,安装项目依赖项。

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

最新更新