当前位置: 首页 > 知识库问答 >
问题:

如何使用网格并行执行cucumber测试用例?

澹台衡
2023-03-14

在对如何并行运行Cucumber测试用例做了大量的研究之后,我发现了下面这篇非常有用的文章:

https://www.opencredo.com/2013/07/02/running-cucumber-jvm-tests-in-parallel/

这篇文章提供了一些很好的信息,可以帮助您开始使用多线程环境,包括一些可以从Github下载的代码。

https://github.com/tristanmccarthy/Cucumber-JVM-Parallel

如果我正确理解了这篇文章,驱动程序应该可以配置为与网格一起工作,使您能够在多个设备上运行多个测试用例。在使用ChromeDrive对代码进行了一些测试后,它看起来确实像文章中描述的那样工作。然而,一旦它被配置为与网格一起工作,测试用例就不再并行执行。相反,它们是按顺序执行的。

目前,我将网格配置为具有 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有更好的了解?请分享与此问题相关的任何文章或信息。

共有1个答案

彭开畅
2023-03-14

网格没有做任何关于拆分作业的事情。我花了一段时间(和很多苏格兰威士忌)才最终意识到网格所做的就是从某处获取作业并将其传递给可用节点。

您需要一个测试运行器,它将您的特性/场景测试拆分为不同的块以传递给网格。不幸的是,cucumber跑者不这么做。有几种不同的方法可以将这些测试拆分为单独的作业以传递给网格。

OpenCredo博客指向了一个使用Maven的更新帖子。一定要看看!

有人提到TestNG。我没用过,所以无法评论。

您可以自己拆分功能/方案,并通过运行不同的测试传递将作业单独传递到 Grid,这对于长期可维护性来说很麻烦,但这是一个快速的开始。

我们编写了一个小型的runner来扫描场景,并动态地将它们传递给网格。不能分享代码,因为这是在工作,我在我的酒店...

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

祝你好运!

 类似资料:
  • 我一直在周而复始地试图弄明白这一点,在Selenium网格集群上使用cucumber和maven并行选项几乎是不可能的。 我的跑步者根据标签跑步,应该会选择5到6个特征文件。 我使用Cucumber for Java、Maven surefire 2.19和Junit。 到目前为止,pom的surefire配置如下所示:- 我的跑步者看起来像这样:- 我和马文一起跑步:- 清洁测试-P RunFe

  • Javav8. x-Springv5. xcucumberv4.2.0 我尝试了temyers/cucumber jvm并行插件,效果很好,但当我进入他们的gitihub页面时,他们宣布停止使用该插件b/c cucumber已经开始支持cucumber jvm 4.0的并行测试运行支持。0 我有使用以下maven依赖项的现有测试。 我有两个问题让我困惑。 为了使用cucumber-jvm,我必须更

  • 我正在尝试使用cucumber标签实现并行执行。我在下面附加了我的功能文件,而不是使用多个功能文件,我正在尝试使用cucumber标签实现我的场景的并行执行 我知道我们可以使用特性文件来实现并行执行,但我希望使用cucumber标记来并行执行基于区域设置的标记。每个标签都与现有客户进行了相关测试。 注意:我使用的是serenity BDD 示例功能(sample.feature

  • 目标:因为我是新来Appium的。我正在尝试在Ubuntu上使用Appium网格在多个android设备上并行自动化Appium测试 我成功启动了一个网格中心服务器和两个具有不同端口的节点 问题:无法同时在两台设备上运行测试用例(我确信问题出在我如何设计框架上)。我不知道如何传递两个设备的能力,同时启动设备(主要问题)。我必须为此使用多线程吗?如果是,那么如何使用 实际:当我在同一个设备上运行多个

  • 我是Serenity和BDD的新手。我有一个基于Serenity Cucumber和Page based模型的小型演示项目。项目结构如下: 登录和注销功能大约有8种情况。 我希望能够并行运行功能文件。实现这一点的最简单和最有效的方法是什么? 到目前为止我已经 > 为每个功能创建了单独的 Runner 类,然后使用故障安全或万无一失的插件 - 这是我不想要的,因为我不希望每个功能文件都有新的运行器。

  • 问题内容: 在对如何并行运行Cucumber测试用例进行了大量研究之后,我发现以下有关该主题的非常有用的文章: https://www.opencredo.com/2013/07/02/running-cucumber-jvm-tests-in- parallel/ 本文提供了一些很好的信息,可帮助您开始使用多线程环境,其中包括一些可以从Github下载的代码。 https://github.co