Cri*_*ras 5 java selenium-grid cucumber selenium-webdriver
在对如何同时运行Cucumber测试用例进行了大量研究之后,我发现了以下关于这个主题的非常有用的文章:
https://www.opencredo.com/2013/07/02/running-cucumber-jvm-tests-in-parallel/
本文提供了一些很好的信息,可以帮助您开始使用多线程环境,包括可以从Github下载的一些代码.
https://github.com/tristanmccarthy/Cucumber-JVM-Parallel
如果我理解正确的文章,驱动程序应该可配置为使用Grid,使您能够跨多个设备运行多个测试用例.在使用chromedriver对代码进行一些测试后,它似乎按照文章中的描述工作.但是,一旦配置为使用Grid,测试用例就不再并行执行.相反,它们是按顺序执行的.
目前,我已将Grid配置为具有1个集线器和2个节点.每个节点在任何给定时间最多可以有2个会话.
注意:没有Cucumber,我能够在多个设备上成功部署多个测试用例,所以我认为这个问题与我的网格设置无关.
以下是与Web驱动程序相关的代码示例:
static {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setJavascriptEnabled(true);
capabilities.setBrowserName("chrome");
capabilities.setPlatform(Platform.ANY);
try {
REAL_DRIVER = new RemoteWebDriver(new URL("http://xxx.xxx.xxx.xxx:4444/wd/hub"), capabilities);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
REAL_DRIVER.manage().timeouts().pageLoadTimeout(3000, TimeUnit.SECONDS);
REAL_DRIVER.manage().window().maximize();
Runtime.getRuntime().addShutdownHook(CLOSE_THREAD);
}
public SharedDriver() {
super(REAL_DRIVER);
}
@Override
public void close() {
if (Thread.currentThread() != CLOSE_THREAD) {
throw new UnsupportedOperationException(
"You shouldn't close this WebDriver. It's shared and will close when the JVM exits.");
}
super.close();
}
Run Code Online (Sandbox Code Playgroud)
我怀疑如果您使用多种浏览器类型,您应该能够在多个设备上运行测试用例(每个设备1个浏览器),但在我的情况下,我正在使用Chrome驱动程序.有谁知道什么可能阻止测试用例分布在多个设备上,或者更好地理解Grid如何与黄瓜一起工作?请分享与此问题相关的任何文章或信息.
网格并没有做任何关于分割工作的事情。我花了一段时间(和很多苏格兰威士忌)才最终意识到网格所做的一切就是从某个地方获取一个作业并将其传递到一个可用的节点。
您需要一个测试运行程序,将您的功能/场景测试分成不同的块以传递到网格。不幸的是,Cucumber runner 并没有这样做。有几种不同的方法可以将这些测试拆分为单独的作业以传递到网格。
该 OpenCredo 博客指向一篇使用 Maven 的较新帖子。请务必检查一下!
有人提到了TestNG。我没有使用过,所以无法评论。
您可以自己拆分功能/场景,并通过运行不同的测试传递将作业单独传递到网格——这对于长期可维护性来说很麻烦,但这是一个快速开始。
我们编写了一个小型运行程序来扫描场景并将其动态传递到网格。无法共享代码,因为它正在工作,而且我在酒店......
要记住一件事:您必须管理依赖性和并发问题。希望您正在构建测试,以便它们之间不存在依赖关系。并发性则是另一回事。我们有一些代码可以将未锁定的资源交给测试(想想用户、数据集等)
祝你好运!