当前位置: 首页 > 面试题库 >

如何使用Grid并行执行黄瓜测试用例?

单琛
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

如果我对文章的理解正确,则应将驱动程序配置为可与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();
}

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


问题答案:

网格对拆分作业没有任何作用。我花了一段时间(和很多刻痕)才终于意识到Grid所做的一切就是从某处获取一份工作并将其传递给可用节点。

您需要一个测试运行程序,将功能/场景测试分为不同的块以传递到Grid。不幸的是,黄瓜赛跑者并没有那样做。有几种不同的方法可以将那些测试分成单独的作业以传递到Grid。

该OpenCredo博客指向使用Maven的新帖子。确保检查出来!

有人提到TestNG。我没有使用过,所以无法对此发表评论。

您可以自己拆分功能/场景,然后通过运行不同的测试遍将作业分别传递到Grid中-这对于长期的可维护性来说很麻烦,但这是一个快速的开始。

我们编写了一个小型运行器,用于扫描方案并将其动态传递给Grid。无法共享代码,因为它正在工作,而且我在酒店…

要记住的一件事:您必须管理依赖关系和并发问题。希望您正在构建测试,以便它们之间没有依赖关系。并发是另一回事。我们有一些代码可以为测试释放解锁资源(请考虑用户,数据集等)。

祝好运!



 类似资料:
  • 我一个类有5到6个方法,想在不同的节点上并行运行方法,我有网格2设置,里面有4个节点。 下面是我的测试。xml 我有一个测试工具,它初始化了login、common和utils类 在我的测试类中,我扩展了测试工具,在@Beforemethod中,我调用了inilze方法 如果我运行测试,我会看到以下问题 两个浏览器在每个节点中打开一个,但只有一个浏览器启动应用程序,另一个不启动。 如果我遗漏了什么

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

  • 我使用testNg用于使用java的自动化,我使用从excel获取数据并作为参数传递给测试脚本。 假设我在中有10行数据,我的测试用例将按顺序执行10次,但现在我想并行运行这10个测试,同时使用线程。 这能做到吗?如果是的话,有人能给我一个同样的例子吗?

  • 问题内容: 我当前的项目使用NUnit进行单元测试并驱动用Selenium编写的UAT。开发人员通常在VS.Net 2003中使用ReSharper的测试运行器来运行测试,而我们的构建框则通过NAnt启动测试。 我们想并行运行UAT测试,以便我们可以利用Selenium Grid / RC,以便它们能够更快地运行。 是否有人对如何实现这一目标有任何想法?和/或在多个浏览器环境下测试Selenium

  • 问题内容: 我有一个Cucumber Step类,我正在尝试为所有方案初始化页面模型。所以我添加了一个@Before注释方法: 然后,我有了一系列依赖于loginPage设置的步骤。例如 我有多个Step类。上面的两个方法都在同一Step类中。但是loginPage始终为null。永远不会调用beforeScenario方法。我是否完全误解了@Before是如何工作的?关于如何获得我想要的工作的任

  • 问题内容: 嗨,我想在gradle项目上运行用Cucumber做的一些测试,我试图在另一台PC上运行此测试(网络访问受限),所以我复制/粘贴了下面的所有内容,并将项目文件喜欢并放置了所有内容。和原来的地方一样 所以一旦我把一切准备就绪,就可以运行它 我失败了 奇怪的是我在缓存目录中有文件 仅供参考,我没有gradle / java的经验,因此任何建议都很棒,这是在build.gradle上“需要”