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をランナーとして使用しています。また、機能ファイルを使用してテストランナーを動的に作成し、それらを並行して実行する方法を教えてください。
更新: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>
_
最初に、このプラグインをプロジェクトの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>
_
次に、上記のプラグインによって生成されたランナークラスを呼び出すプラグインのすぐ下にプラグインを追加します
_ <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>
_
上記の2つのプラグインは、キュウリのテストを並行して実行するためのマジックを行います(マシンに高度なハードウェアサポートがある場合)。
厳密に提供される_<forkCount>n</forkCount>
_ここで「n」は、1)高度なハードウェアサポートと2)利用可能なノード、つまりHUBに登録されたブラウザーインスタンスに直接比例します。
最も重要で重要な変更の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());
}
}
}
_
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
_
期待しているのが複数の機能を並行して実行できることだけである場合は、次のことを試してみてください。
parallel=true
から@DataProvider
注釈付きメソッド。デフォルトのdataprovider-thread-count
TestNGの10
そしてTestNGにfeatures
を並行して実行するように指示したので、機能ファイルが並行して実行されるのを確認する必要があります。
しかし、Cucumberのレポートは本質的にスレッドセーフではないため、レポートが文字化けする場合があります。
Cucumberは、そのままでは並列実行をサポートしていません。試しましたが、フレンドリーではありません。
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のテストデータを提供できます。