【问题标题】:How to execute cucumber test cases in parallel using Grid?如何使用 Grid 并行执行黄瓜测试用例?
【发布时间】:2016-03-29 05:27:21
【问题描述】:

在对如何并行运行 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();
}

我怀疑如果您使用一种以上的浏览器类型,您应该能够在多台设备上运行测试用例(每台设备 1 个浏览器),但就我而言,我正在使用 Chrome 驱动程序。有谁知道是什么阻止了测试用例分布在多个设备上,或者对 Grid 如何与 cucumber 一起工作有更好的理解?请分享与此问题相关的任何文章或信息。

【问题讨论】:

  • 您是否按照url中所述进行了精确设置
  • 是的,我按照说明下载了代码,在本地运行了代码,然后修改了共享驱动程序,使其如上所示工作。 IP 地址指向网格集线器。
  • 你能分享你的测试课吗,所有的测试都提到了?
  • 代码和github中显示的完全一样。我只修改了上面代码所示的共享驱动。
  • 你能分享你的节点配置吗?

标签: java selenium-webdriver cucumber selenium-grid


【解决方案1】:

Grid 对拆分工作没有任何作用。我花了一段时间(和很多苏格兰威士忌)才最终意识到 Grid 所做的就是从某个地方获取一份工作并将其传递给一个可用的节点。

您需要一个测试运行程序,它将您的功能/场景测试分成不同的块以传递给 Grid。不幸的是,Cucumber runner 并没有这样做。有几种不同的方法可以将这些测试拆分为单独的作业以传递给网格。

OpenCredo 博客指向a newer post that uses Maven。请务必检查一下!

有人提到了TestNG。我没用过,所以不能评论。

您可以自己拆分您的功能/场景,并通过运行不同的测试通道将作业分别传递给您的网格——这对于长期可维护性来说很麻烦,但它是一个快速入门。

我们编写了一个小型运行程序,它可以扫描场景并将它们动态传递给 Grid。无法共享代码,因为它正在工作,我在酒店...

要记住一件事:您必须管理依赖项和并发问题。希望您正在构建测试,因此它们之间没有依赖关系。并发是另一回事。我们有一些代码可以将解锁的资源交给测试(想想用户、数据集等)

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 2022-01-23
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    相关资源
    最近更新 更多