2016-12-08 12 views
3

У меня есть следующие файлы функций (Отдельные файлы функций) в src/test/resources/feature /, и я хотел бы запускать их параллельно. Например: один файл функций должен выполняться в хроме, а другой должен выполняться в firefox, как указано в названии @Tags.Как выполнить файл описания огурца параллельный

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 

Может кто-нибудь помочь мне достичь this.I'm с помощью огурца Java 1.2.2 версии и AbstractTestNGCucumberTests с использованием в качестве бегуна. Кроме того, дайте мне знать, как я могу динамически создавать тестовый Runner, используя функциональные файлы и запускать их параллельно.

+0

что вы пытаетесь достичь здесь? Какова конечная цель? – k1133

+0

Я хотел бы выполнить файлы функций параллельно с разными браузерами. У меня есть приложение, где мне нужно выполнить проверку совместимости с браузером. До сих пор мы выполняли последовательность для проверки совместимости браузера. Я только что слышал о плагине cucumber-jvm-parallel, но не знаю, как его реализовать. И услышал, что он будет создавать динамиков динамически и поможет нам выполнять параллельное выполнение по сценарию или мудрый. – ArrchanaMohan

+0

Вы можете попробовать maven и верный плагин. Он будет использовать несколько потоков, которые будут запускать каждый доступный бегун по отдельности. Google cucmber java maven параллель. Используется, чтобы иметь ссылку на статью, но каким-то образом удалили – Grasshopper

ответ

6

Обновление: Версия 4.0.0 доступна в центральном репозитории maven с множеством изменений. for more details go here.

Обновление: Версия 2.2.0 доступна в центральном репозитории maven.

Вы можете использовать плагин opensource cucumber-jvm-parallel-plugin, который имеет много преимуществ по сравнению с существующими решениями. Доступен в мавена repository

<dependency> 
    <groupId>com.github.temyers</groupId> 
    <artifactId>cucumber-jvm-parallel-plugin</artifactId> 
    <version>2.1.0</version> 
    </dependency> 
  1. Прежде всего, необходимо добавить этот плагин с требуемой конфигурацией в вашем пом файле проекта.

    <plugin> 
        <groupId>com.github.temyers</groupId> 
        <artifactId>cucumber-jvm-parallel-plugin</artifactId> 
        <version>2.1.0</version> 
        <executions> 
        <execution> 
        <id>generateRunners</id> 
        <phase>generate-test-sources</phase> 
        <goals> 
         <goal>generateRunners</goal> 
        </goals> 
        <configuration> 
         <!-- Mandatory --> 
         <!-- comma separated list of package names to scan for glue code --> 
         <glue>foo, bar</glue> 
         <outputDirectory>${project.build.directory}/generated-test-sources/cucumber</outputDirectory> 
          <!-- The directory, which must be in the root of the runtime classpath, containing your feature files. --> 
          <featuresDirectory>src/test/resources/features/</featuresDirectory> 
          <!-- Directory where the cucumber report files shall be written --> 
          <cucumberOutputDir>target/cucumber-parallel</cucumberOutputDir> 
          <!-- comma separated list of output formats json,html,rerun.txt --> 
          <format>json</format> 
          <!-- CucumberOptions.strict property --> 
          <strict>true</strict> 
          <!-- CucumberOptions.monochrome property --> 
          <monochrome>true</monochrome> 
          <!-- The tags to run, maps to CucumberOptions.tags property you can pass ANDed tags like "@tag1","@tag2" and ORed tags like "@tag1,@tag2,@tag3" --> 
         <tags></tags> 
         <!-- If set to true, only feature files containing the required tags shall be generated. --> 
         <filterFeaturesByTags>false</filterFeaturesByTags> 
         <!-- Generate TestNG runners instead of default JUnit ones. --> 
         <useTestNG>false</useTestNG> 
         <!-- The naming scheme to use for the generated test classes. One of 'simple' or 'feature-title' --> 
         <namingScheme>simple</namingScheme> 
         <!-- The class naming pattern to use. Only required/used if naming scheme is 'pattern'.--> 
         <namingPattern>Parallel{c}IT</namingPattern> 
         <!-- One of [SCENARIO, FEATURE]. SCENARIO generates one runner per scenario. FEATURE generates a runner per feature. --> 
         <parallelScheme>SCENARIO</parallelScheme> 
         <!-- This is optional, required only if you want to specify a custom template for the generated sources (this is a relative path) --> 
         <customVmTemplate>src/test/resources/cucumber-custom-runner.vm</customVmTemplate> 
         </configuration> 
         </execution> 
        </executions> 
        </plugin> 
    
  2. Теперь добавьте ниже плагин чуть ниже выше плагин, который будет ссылаться на классы бегуна, сгенерированные плагином выше

    <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-surefire-plugin</artifactId> 
         <version>2.19</version> 
         <configuration> 
          <forkCount>5</forkCount> 
          <reuseForks>true</reuseForks> 
          <includes> 
           <include>**/*IT.class</include> 
          </includes> 
         </configuration> 
        </plugin> 
    
  3. Выше двух плагинов будет делать магию для испытания огурцов работает параллельно (если вы машина также имеют расширенную аппаратную поддержку).

  4. Строго предоставлено <forkCount>n</forkCount> здесь 'n' прямо пропорционально 1) Расширенная аппаратная поддержка и 2) доступные узлы, то есть зарегистрированные экземпляры браузера в HUB.

  5. Одним из основных и наиболее важных изменений являются вашим класс WebDriver должен быть СОВМЕСТНЫМИ и вы должны не реализовать метод driver.quit(), как закрывание заботиться путем выключения крючка.

    import cucumber.api.Scenario; 
    import cucumber.api.java.After; 
    import cucumber.api.java.Before; 
    import org.openqa.selenium.OutputType; 
    import org.openqa.selenium.WebDriver; 
    import org.openqa.selenium.WebDriverException; 
    import org.openqa.selenium.firefox.FirefoxDriver; 
    import org.openqa.selenium.support.events.EventFiringWebDriver; 
    
    public class SharedDriver extends EventFiringWebDriver { 
        private static WebDriver REAL_DRIVER = null; 
    
    
    
        private static final Thread CLOSE_THREAD = new Thread() { 
         @Override 
         public void run() { 
          REAL_DRIVER.close(); 
         } 
        }; 
    
        static { 
         Runtime.getRuntime().addShutdownHook(CLOSE_THREAD); 
        } 
    
        public SharedDriver() { 
         super(CreateDriver()); 
        } 
    
        public static WebDriver CreateDriver() { 
         WebDriver webDriver; 
         if (REAL_DRIVER == null) 
          webDriver = new FirefoxDriver(); 
         setWebDriver(webDriver); 
         return webDriver; 
        } 
    
        public static void setWebDriver(WebDriver webDriver) { 
         this.REAL_DRIVER = webDriver; 
        } 
    
        public static WebDriver getWebDriver() { 
         return this.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(); 
        } 
    
        @Before 
        public void deleteAllCookies() { 
         manage().deleteAllCookies(); 
        } 
    
        @After 
        public void embedScreenshot(Scenario scenario) { 
         try { 
          byte[] screenshot = getScreenshotAs(OutputType.BYTES); 
          scenario.embed(screenshot, "image/png"); 
         } catch (WebDriverException somePlatformsDontSupportScreenshots) { 
          System.err.println(somePlatformsDontSupportScreenshots.getMessage()); 
         } 
        } 
    } 
    
  6. Учитывая вы хотите выполнить более 50 потоков, то есть же нет экземпляров браузера зарегистрированы в HUB, но концентратор умрет, если он не получает достаточное количество памяти поэтому, чтобы избежать этой критической ситуации вы должны начать ступицу -DPOOL_MAX = 512 (или больше), как указано в grid2 documentation.

    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

+0

Большое спасибо sugat Mankar за ваши входы. Это очень полезно. – ArrchanaMohan

+0

Я действительно не понимаю. Почему мне нужно добавить 'cucumber-jvm-parallel-plugin', если все еще необходимо указывать вилки в' maven-surefire-plugin'? – olyv

4

Огурцы не поддерживают параллельное исполнение из коробки. Я пробовал, но это не дружелюбно.

  1. Мы должны использовать возможность maven для его параллельного вызова. См. link
  2. Также существует проект github, который использует настраиваемый плагин для параллельного выполнения. См cucumber-jvm-parallel-plugin
+0

Спасибо, bharath kumar. Это помогает. – ArrchanaMohan

+0

Кажется, это способ сопоставления выходных файлов JOC параллельного огурца в один отчет: https://github.com/rajatthareja/ReportBuilder. Кроме того, для Ruby размещение модуля parallel_cucumber в Rakefile, похоже, работает параллельно без проблем. – djangofan

1

Если все, что вы ожидаете, чтобы иметь возможность запускать несколько функций одновременно, то вы можете попробовать делать следующее:

  • Дубликат класс AbstractTestNGCucumberTests в тестовом проекте и установить атрибут parallel=true на @DataProvider аннотированный метод.

Поскольку по умолчанию dataprovider-thread-count из TestNG является 10 и теперь, когда вы поручили TestNG запустить features параллельно, вы должны начать видеть ваши художественные файлы будут выполняться параллельно.

Но я понимаю, что отчет о огурцах по сути не является потокобезопасным, поэтому ваши отчеты могут казаться искаженными.

+0

Спасибо за ваши входы кришнана махадеван. – ArrchanaMohan