首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何并行执行黄瓜特征文件

如何并行执行黄瓜特征文件
EN

Stack Overflow用户
提问于 2016-12-08 07:33:43
回答 5查看 73.7K关注 0票数 10

我在src/test/resources/ feature /中有下面的特性文件(单独的特性文件),我想并行运行它们。比如:一个特性文件必须在chrome中执行,另一个特性文件必须在firefox中执行,就像前面提到的@标记名称一样。

代码语言:javascript
复制
Feature: Refund item

@chrome
  Scenario: Jeff returns a faulty microwave
    Given Jeff has bought a microwave for $100
    And he has a receipt
    When he returns the microwave
    Then Jeff should be refunded $100

Feature: Refund Money

@firefox
  Scenario: Jeff returns the money
    Given Jeff has bought a microwave for $100
    And he has a receipt
    When he returns the microwave
    Then Jeff should be refunded $100

有人能帮我做到这一点吗?我用的是黄瓜-java 1.2.2版本,AbstractTestNGCucumberTests用的是跑步。另外,让我知道如何使用特性文件动态创建测试运行程序,并使它们并行运行。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-12-12 11:43:26

更新: 4.0.0版本可在maven中央存储库中获得,其中包含大量更改.更多细节请看这里。

更新: 2.2.0版本可在maven中央存储库获得。

您可以使用开源插件黄瓜-jvm-并行插件,它与现有解决方案相比有许多优点。可在maven 存储库上获得

代码语言:javascript
复制
   <dependency>
     <groupId>com.github.temyers</groupId>
     <artifactId>cucumber-jvm-parallel-plugin</artifactId>
     <version>2.1.0</version>
   </dependency>
  1. 首先,您需要在您的项目pom文件中添加这个具有所需配置的插件。 com.github.temyers黄瓜-jvm-并行插件2.1.0 generateRunners生成-测试-源generateRunners foo,bar ${project.build.directory}/generated-test-sources/cucumber src/test/resources/parallel/目标值/黄瓜-并行json真假伪简单并行{c}IT场景src/test/resources/custom定制-runner.vm
  2. 现在添加下面的插件,就在上面的插件下面,它将调用由上面的插件生成的运行器类。 org.apache.maven.plugins maven-尽是火-插件2.19 5真**/*IT.class
  3. 以上两个插件将神奇地运行黄瓜测试并行(如果你的机器也有先进的硬件支持)。
  4. 这里严格提供的<forkCount>n</forkCount> 'n‘与高级硬件支持成正比;2)可用节点,即注册的浏览器实例到集线器。
  5. 一个主要也是最重要的更改是您的WebDriver类必须是共享,您应该使用而不是实现driver.quit()方法,因为关闭是通过关机钩子来处理的。 导入cucumber.api.Scenario;导入cucumber.api.java.After;导入cucumber.api.java.Before;导入org.openqa.selenium.OutputType;导入org.openqa.selenium.WebDriver;导入org.openqa.selenium.WebDriverException;导入org.openqa.selenium.firefox.FirefoxDriver;import公共类SharedDriver扩展EventFiringWebDriver {私有静态WebDriver REAL_DRIVER = null;私有静态最终线程CLOSE_THREAD =新线程(){ @Override (){ REAL_DRIVER.close();};静态{REAL_DRIVER.close}公共SharedDriver() { CreateDriver();}公共静态WebDriver CreateDriver(){ WebDriver webDriver;如果(REAL_DRIVER == null) webDriver =新的FirefoxDriver();setWebDriver( webDriver);返回webDriver;}公共静态空洞setWebDriver(WebDriver WebDriver ){ this.REAL_DRIVER = webDriver;} public setWebDriver(){返回this.REAL_DRIVER;} @Override (){ if (Thread.currentThread() != CLOSE_THREAD) {引发新的UnsupportedOperationException(“您不应该关闭该WebDriver”)。它是共享的,当JVM退出时,它将关闭。“;} super.close();}@在公共deleteAllCookies() { manage().deleteAllCookies();}@ public void embedScreenshot(场景场景){ try { byte[]屏幕截图=getScreen较‘s(OutputType.BYTES);scenario.embed(屏幕快照,"image/png");{ System.err.println(somePlatformsDontSupportScreenshots.getMessage());}}{WebDriverException}
  6. 考虑到您想要执行超过50个线程,也就是注册到集线器的浏览器实例的数目相同,但是集线器如果没有足够的内存,就会死掉,因此,为了避免这种危急情况,您应该使用-DPOOL_MAX=512 (或更大的)启动集线器,如grid2文档中所述。 Really large (>50 node) Hub installations may need to increase the jetty threads by setting -DPOOL_MAX=512 (or larger) on the java command line. java -jar selenium-server-standalone-<version>.jar -role hub -DPOOL_MAX=512
票数 16
EN

Stack Overflow用户

发布于 2016-12-09 06:13:55

黄瓜不支持开箱即用并行执行。我试过了,但这不友好。

  1. 我们必须使用maven的能力并行调用它。参考链接
  2. 还有一个github项目,它使用自定义插件并行执行。参考黄瓜-jvm-并行插件
票数 5
EN

Stack Overflow用户

发布于 2016-12-09 17:51:50

如果您所期望的是能够并行运行多个特性,那么您可以尝试执行以下操作:

由于来自TestNG的默认TestNG是10,现在您已经指示TestNG并行运行features,您应该开始看到您的特性文件被并行执行。

但是我知道Cucumber报告本身并不是线程安全的,所以您的报告可能会出现错误。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41034116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档