如何使用 Grid 并行执行黄瓜测试用例?
How to execute cucumber test cases in parallel using Grid?
在对如何运行 Cucumber 并行测试用例进行大量研究后,我发现以下关于该主题的非常有用的文章:
https://www.opencredo.com/2013/07/02/running-cucumber-jvm-tests-in-parallel/
这篇文章提供了一些非常好的信息,可以帮助您开始使用 multi-threaded 环境,包括一些您可以从 Github 下载的代码。
https://github.com/tristanmccarthy/Cucumber-JVM-Parallel
如果我对这篇文章的理解正确,driver 应该可以配置为与 Grid 一起使用,使您能够 运行 跨多个设备的多个测试用例。在使用 chromedriver 对代码进行了一些测试后,它似乎确实按照文章中的描述工作。然而,一旦它被配置为与 Grid 一起工作,测试用例就不再并行执行。相反,它们是按顺序执行的。
目前,我将网格配置为具有 1 个集线器和 2 个节点。每个节点在任何给定时间最多可以有 2 个会话。
注意:没有 Cucumber,我能够在多个设备上成功部署多个测试用例,所以我认为问题与我的网格设置无关。
这是与网络相关的代码示例 driver:
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();
}
我怀疑如果您使用多种浏览器类型,您应该能够 运行 多个设备上的测试用例(每个设备 1 个浏览器),但在我的情况下,我正在使用 Chrome driver。有谁知道什么可能会阻止测试用例分布在多个设备上,或者对 Grid 如何与 Cucumber 一起工作有更好的了解?请分享与此问题相关的任何文章或信息。
Grid 不会对拆分作业做任何事情。我花了一段时间(喝了很多威士忌)才终于意识到 Grid 所做的就是从某个地方获取作业并将其传递给可用节点。
您需要一个测试运行器来将您的 feature/scenario 测试分成不同的块以传递给 Grid。不幸的是,Cucumber runner 并没有这样做。有几种不同的方法可以将这些测试拆分为单独的作业以传递给网格。
OpenCredo 博客指向 a newer post that uses Maven。请务必检查一下!
有人提到了TestNG。我没用过,所以无法评论。
您可以自己拆分 features/scenarios 并通过 运行 不同的测试通过将作业分别传递给您的网格——这对于长期可维护性来说很麻烦,但这是一个快速的开始。
我们编写了一个小型运行器来扫描场景并将它们动态传递到网格。无法共享代码,因为它在工作并且我在酒店...
要记住一件事:您必须管理依赖性和并发性问题。希望您正在构建测试,因此它们之间没有依赖关系。并发是另一回事。我们有一些代码可以将未锁定的资源交给测试(想想用户、数据集等)
祝你好运!
在对如何运行 Cucumber 并行测试用例进行大量研究后,我发现以下关于该主题的非常有用的文章:
https://www.opencredo.com/2013/07/02/running-cucumber-jvm-tests-in-parallel/
这篇文章提供了一些非常好的信息,可以帮助您开始使用 multi-threaded 环境,包括一些您可以从 Github 下载的代码。
https://github.com/tristanmccarthy/Cucumber-JVM-Parallel
如果我对这篇文章的理解正确,driver 应该可以配置为与 Grid 一起使用,使您能够 运行 跨多个设备的多个测试用例。在使用 chromedriver 对代码进行了一些测试后,它似乎确实按照文章中的描述工作。然而,一旦它被配置为与 Grid 一起工作,测试用例就不再并行执行。相反,它们是按顺序执行的。
目前,我将网格配置为具有 1 个集线器和 2 个节点。每个节点在任何给定时间最多可以有 2 个会话。
注意:没有 Cucumber,我能够在多个设备上成功部署多个测试用例,所以我认为问题与我的网格设置无关。
这是与网络相关的代码示例 driver:
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();
}
我怀疑如果您使用多种浏览器类型,您应该能够 运行 多个设备上的测试用例(每个设备 1 个浏览器),但在我的情况下,我正在使用 Chrome driver。有谁知道什么可能会阻止测试用例分布在多个设备上,或者对 Grid 如何与 Cucumber 一起工作有更好的了解?请分享与此问题相关的任何文章或信息。
Grid 不会对拆分作业做任何事情。我花了一段时间(喝了很多威士忌)才终于意识到 Grid 所做的就是从某个地方获取作业并将其传递给可用节点。
您需要一个测试运行器来将您的 feature/scenario 测试分成不同的块以传递给 Grid。不幸的是,Cucumber runner 并没有这样做。有几种不同的方法可以将这些测试拆分为单独的作业以传递给网格。
OpenCredo 博客指向 a newer post that uses Maven。请务必检查一下!
有人提到了TestNG。我没用过,所以无法评论。
您可以自己拆分 features/scenarios 并通过 运行 不同的测试通过将作业分别传递给您的网格——这对于长期可维护性来说很麻烦,但这是一个快速的开始。
我们编写了一个小型运行器来扫描场景并将它们动态传递到网格。无法共享代码,因为它在工作并且我在酒店...
要记住一件事:您必须管理依赖性和并发性问题。希望您正在构建测试,因此它们之间没有依赖关系。并发是另一回事。我们有一些代码可以将未锁定的资源交给测试(想想用户、数据集等)
祝你好运!