web-dev-qa-db-ja.com

キュウリ機能ファイルを並行して実行する方法

Src/test/resources/feature /に以下の機能ファイル(個別の機能ファイル)があり、それらを並行して実行したいと思います。いいね:1つの機能ファイルはchromeで実行する必要があり、別の機能ファイルは@Tags名で述べたようにfirefoxで実行する必要があります。

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

誰かが私にこれを達成するのを助けてもらえますか?私はcucumber-Java 1.2.2バージョンを使用しており、AbstractTestNGCucumberTestsをランナーとして使用しています。また、機能ファイルを使用してテストランナーを動的に作成し、それらを並行して実行する方法を教えてください。

9
ArrchanaMohan

更新:4.0.0バージョンは、多数の変更を含むmaven中央リポジトリで利用可能です。 詳細については、こちらをご覧ください

更新:2.2.0バージョンはmaven中央リポジトリで利用可能です。

オープンソースプラグイン cucumber-jvm-parallel-plugin を使用できます。これは、既存のソリューションよりも多くの利点があります。 mavenで利用可能 リポジトリ

_   <dependency>
     <groupId>com.github.temyers</groupId>
     <artifactId>cucumber-jvm-parallel-plugin</artifactId>
     <version>2.1.0</version>
   </dependency>
_
  1. 最初に、このプラグインをプロジェクトのpomファイルに必要な設定とともに追加する必要があります。

    _<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. 上記の2つのプラグインは、キュウリのテストを並行して実行するためのマジックを行います(マシンに高度なハードウェアサポートがある場合)。

  4. 厳密に提供される_<forkCount>n</forkCount>_ここで「n」は、1)高度なハードウェアサポートと2)利用可能なノード、つまりHUBに登録されたブラウザーインスタンスに直接比例します。

  5. 最も重要で重要な変更の1つは、WebDriverクラスを[〜#〜] shared [〜#〜]にする必要があり、notdriver.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に登録されていませんが、十分なメモリを確保できない場合、ハブは停止します。 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_

13
Sugat Mankar

期待しているのが複数の機能を並行して実行できることだけである場合は、次のことを試してみてください。

  • テストプロジェクトでクラス AbstractTestNGCucumberTests を複製し、属性parallel=trueから@DataProvider注釈付きメソッド。

デフォルトのdataprovider-thread-count TestNGの10そしてTestNGにfeaturesを並行して実行するように指示したので、機能ファイルが並行して実行されるのを確認する必要があります。

しかし、Cucumberのレポートは本質的にスレッドセーフではないため、レポートが文字化けする場合があります。

3

Cucumberは、そのままでは並列実行をサポートしていません。試しましたが、フレンドリーではありません。

  1. Mavenの機能を使用して、並行して呼び出す必要があります。参照 リンク
  2. また、カスタムプラグインを使用して並行して実行するgithubプロジェクトがあります。参照 cucumber-jvm-parallel-plugin
3
Bharath Kumar

TestNGを最大限に活用するには、Testngのサードパーティの拡張機能 [〜#〜] qaf [〜#〜] フレームワークを使用できます。 GherkinFactory を使用してガーキンを含む複数の bdd構文 をサポートします。 QAFでBDDを使用している間、データプロバイダー、さまざまな方法(グループ/テスト/メソッド)での並列実行構成、TestNGリスナーなど、各TestNG機能を利用できます。

QAFは、各シナリオをTestNGテストと見なし、シナリオアウトラインをTestNGデータ駆動テストと見なします。 qafにはドライバー管理とリソース管理が組み込まれているため、ドライバー管理またはリソース管理のために1行のコードを記述する必要はありません。必要なことは、要件に従ってTestNG xml構成ファイルを作成して、1つ以上のブラウザーで並列メソッド(シナリオ)またはグループまたはxmlテストを実行することです。

さまざまな可能性を可能にします 構成の組み合わせ 。以下は、この質問に対処するためのxml構成です。これは、2つのブラウザーで並行してシナリオを実行します。各ブラウザーのスレッド数を標準のTestNG xml構成として構成することもできます。

<suite name="AUT Test Automation" verbose="0"  parallel="tests">
<test name="Test-on-chrome">
   <parameter name="scenario.file.loc" value="resources/features" />
   <parameter name="driver.name" value="chromeDriver" />           
   <classes>
      <class name="com.qmetry.qaf.automation.step.client.gherkin.GherkinScenarioFactory" />
   </classes>
</test>

<test name="Test-on-FF">
   <parameter name="scenario.file.loc" value="resources/features" />
   <parameter name="driver.name" value="firefoxDriver" />           
   <classes>
      <class name="com.qmetry.qaf.automation.step.client.gherkin.GherkinScenarioFactory" />
   </classes>
</test>
</suite>

最新のBDDTestFactory2は、QAF BDD、Jbehave、およびgherkinから派生した 構文 をサポートします。ガーキンのタグおよび例として、qaf bddのメタデータをサポートしています。 inbuilt data-providers を利用して、BDDのメタデータを使用してXML/JSON/CSV/Excel/DBのテストデータを提供できます。

0
user861594