アロー関数は避ける
ES6のアロー関数() => {}は、thisを現在のコンテキストにバインドするため、フックとステップ定義の間で状態を共有できなくなります。
Cucumberは、Gherkinフィーチャーファイルに記述されたシナリオに基づいて自動テストを実装するために使用できます。
ステップ定義で示した例では、Cucumberはステップからテキスト48を抽出し、それをintに変換して、メソッド関数ブロック関数関数の引数として渡します。
メソッド関数ブロック関数関数のパラメーターの数は、式のキャプチャグループキャプチャグループキャプチャグループ出力パラメーター出力パラメーターの数と一致する必要があります。(不一致がある場合、Cucumberはエラーをスローします)。
Gherkinからのデータテーブルは、ステップ定義の最後のパラメーターとしてDataTableオブジェクトを使用することでアクセスできます。この変換は、Cucumberまたは手動で行うことができます。
以下のコレクションのいずれかとして、テーブルの形状に応じて:以下のコレクションのいずれかとして、テーブルの形状に応じて:List<List<String>> table
List<Map<String, String>> table
Map<String, String> table
Map<String, List<String>> table
Map<String, Map<String, String>> table
ステップ定義にList<String>List<String>java.util.List[String]文字列のリスト文字列のリストを渡す最も簡単な方法は、データテーブルを使用することです。
Given the following animals:
| cow |
| horse |
| sheep |
引数をList<String>List<String>java.util.List[String]文字列のリスト文字列のリストとして宣言しますが、式でキャプチャグループキャプチャグループキャプチャグループ出力パラメーター出力パラメーターを定義しないでください。
アノテーション付きメソッドスタイル
@Given("the following animals:")
public void the_following_animals(List<String> animals) {
}
アノテーション付きメソッドスタイル
@Given("the following animals:")
fun the_following_animals(animals: List<String>) {
}
Given("the following animals:") { animals: java.util.List[String] =>
}
この場合、DataTableは、ステップ定義を呼び出す前に、Cucumberによって自動的にList<String>List<String>java.util.List[String]文字列の配列文字列の配列にフラット化されます(DataTable.asList(String.class)を使用)。
注:文字列、整数、浮動小数点数、BigInteger、BigDecimalのコレクションに加えて、Byte、Short、Long、Doubleもサポートされています。
注:文字列、整数、浮動小数点数、BigInteger、BigDecimalのコレクションに加えて、Byte、Short、Long、Doubleもサポートされています。
注:今のところ、Cucumber ScalaはScalaコレクションタイプの使用をサポートしていません。
Githubを参照してください。
また、cucumber-jvmデータテーブルを参照してください。
また、cucumber-jvmデータテーブルを参照してください。
ステップは、メソッド呼び出しまたは関数呼び出しに似ています。
例えば
Given I have 93 cucumbers in my belly
このステップでは、上記のステップ定義を1つの引数(値93)で「呼び出し」ています。
ステップは、features/\*.feature*.feature*.feature*.feature*.featureファイルで宣言されます。
Regexpと照合しますステップ定義が、前置詞または副詞(Given、When、Then、And、But)で始まることを思い出してください。
すべてのステップ定義は、Cucumberがフィーチャーファイルのプレーンテキストの実行を開始する前にロード(および定義)されます。
実行が開始されると、各ステップについて、Cucumberは一致するRegexpで登録されたステップ定義を探します。それが見つかった場合、キャプチャグループキャプチャグループキャプチャグループ出力パラメーター出力パラメーターと、Regexpからの変数をすべて引数としてメソッド関数ブロック関数関数に渡し、実行します。
Cucumberがステップ定義を登録または検索するとき、使用される特定の前置詞/副詞は重要ではありません。
ステップ定義にテーブル全体または大きな文字列を渡す方法の詳細については、複数行のステップ引数も確認してください。
各ステップは、次のいずれかの結果を持つことができます
Cucumberが一致するステップ定義を見つけると、それを実行します。ステップ定義のブロックでエラーが発生しない場合、ステップは成功(緑色)としてマークされます。ステップ定義からreturnするものは、まったく意味がありません。
Cucumberが一致するステップ定義を見つけることができない場合、ステップは未定義(黄色)としてマークされ、シナリオ内の後続のすべてのステップはスキップされます。
ステップ定義のメソッド関数ブロック関数関数がpendingメソッド関数ブロック関数関数を呼び出すと、ステップは保留中(undefinedの場合と同様に黄色)としてマークされ、作業が必要であることを示します。
ステップ定義のメソッド関数ブロック関数関数が実行されてエラーが発生した場合、ステップは失敗(赤色)としてマークされます。ステップ定義から返すものは、まったく意味がありません。
nilnullnullnullnullまたはfalseを返しても、ステップ定義が失敗することはありません。
undefined、pending、またはfailedのステップに続くステップは、一致するステップ定義があっても実行されません。これらのステップは、スキップ(シアン)としてマークされます。
ステップ定義は、Cucumberがどの処理を実行すべきかを判断するために一意である必要があります。曖昧なステップ定義を使用すると、CucumberはCucumber::Ambiguousエラーを発生させ、 CucumberはAmbiguousStepDefinitionsExceptionを発生させ、CucumberはAmbiguousStepDefinitionsExceptionを発生させ、CucumberはAmbiguousStepDefinitionsExceptionを発生させ、 ステップ/シナリオは「Ambiguous」という結果になり、 曖昧さを修正するように指示されます。
フックは、Cucumberの実行サイクル中のさまざまな時点で実行できるコードブロックです。通常、各シナリオの前後の環境のセットアップとティアダウンに使用されます。
フックが定義されている場所は、どのシナリオまたはステップで実行されるかに影響しません。より細かい制御が必要な場合は、条件付きフックを使用できます。
フックは任意のクラスで宣言できます。
フックは任意のクラスで宣言できます。
フックは任意のクラス、トレイト、またはオブジェクトで宣言できます。
フックは、features/support/env.rbファイル、またはfeatures/supportディレクトリの下の任意のファイル(たとえば、support/hooks.rbというファイル)で宣言できます。
フックは、features/support/env.jsファイル、またはfeatures/supportディレクトリの下の任意のファイル(たとえば、features/support/hooks.jsというファイル)で宣言できます。
シナリオフックは、すべてのシナリオで実行されます。
Beforeフックは、各シナリオの最初のステップの前に実行されます。
アノテーション付きメソッドスタイル
@Before
public void doSomethingBefore() {
}
ラムダスタイル
Before(() -> {
});
ラムダスタイル
Before { scenario: Scenario ->
// doSomething
}
Before { scenario: Scenario =>
// doSomething
}
// Import the Before function
const { Before } = require('@cucumber/cucumber')
Before(async function () {
})
Before do
# Do something before each scenario
end
必要に応じて、フックの明示的な順序を指定できます。
必要に応じて、フックの明示的な順序を指定できます。
必要に応じて、フックの明示的な順序を指定できます。
アノテーション付きメソッドスタイル
@Before(order = 10)
public void doSomething(){
// Do something before each scenario
}
ラムダスタイル
Before(10, () -> {
// Do something before each scenario
});
Before(10) { scenario: Scenario ->
// Do something before each scenario
}
package io.cucumber.example
import io.cucumber.java.AfterAll
import io.cucumber.java.BeforeAll
@BeforeAll
fun beforeAll() {
println("before all")
}
@AfterAll
fun afterAll() {
println("after all")
}
Before(10) { scenario: Scenario =>
// Do something before each scenario
}
Beforeフックは、宣言された同じ順序で実行されます。
Beforeフックは、宣言された同じ順序で実行されます。
Afterフックは、ステップの結果がfailed、undefined、pending、またはskippedの場合でも、各シナリオの最後のステップの後に実行されます。
アノテーション付きメソッドスタイル
@After
public void doSomethingAfter(Scenario scenario){
// Do something after after scenario
}
ラムダスタイル
After((Scenario scenario) -> {
});
ラムダスタイル
After { scenario: Scenario ->
// doSomething
}
After { scenario: Scenario =>
// doSomething
}
After(async function (scenario) {
})
After do |scenario|
end
scenarioパラメーターはオプションです。これを使用すると、シナリオのステータスを確認できます。
たとえば、失敗したシナリオに対してWebDriverWebDriverWebDriverWebDriverCapybaraでスクリーンショットを撮り、Cucumberのレポートに埋め込むことができます。
その方法の例については、ブラウザ自動化ページを参照してください。
これは、最初の失敗時に終了する例です(継続的インテグレーションのように、迅速なフィードバックが重要な場合に役立つ可能性があります)。
After do |s|
# Tell Cucumber to quit after this scenario is done - if it failed.
Cucumber.wants_to_quit = true if s.failed?
end
Aroundフックは、シナリオを「囲んで」実行されます。これは、シナリオの実行をブロックでラップするために使用できます。Aroundフックは、Scenarioオブジェクトとブロック(Proc)オブジェクトを受け取ります。block.callを呼び出すと、シナリオが実行されます。
次の例では、@fastタグが付けられたシナリオは、実行に0.5秒以上かかると失敗します。
Around('@fast') do |scenario, block|
Timeout.timeout(0.5) do
block.call
end
end
Aroundフックをサポートしていません。Aroundフックをサポートしていません。Aroundフックをサポートしていません。Aroundフックをサポートしていません。ステップフックは、ステップの前後に呼び出されます。フックは「invoke around」セマンティクスを持ちます。つまり、BeforeStepフックが実行された場合、ステップの結果に関係なくAfterStepフックも実行されます。ステップが失敗した場合、次のステップとそのフックはスキップされます。
ステップフックは、ステップの前後に呼び出されます。フックは「invoke around」セマンティクスを持ちます。つまり、BeforeStepフックが実行された場合、ステップの結果に関係なくAfterStepフックも実行されます。ステップが失敗した場合、次のステップとそのフックはスキップされます。
ステップフックは、ステップの前後に呼び出されます。フックは「invoke around」セマンティクスを持ちます。つまり、BeforeStepフックが実行された場合、ステップの結果に関係なくAfterStepフックも実行されます。ステップが失敗した場合、次のステップとそのフックはスキップされます。
ステップフックは、ステップの前後に呼び出されます。フックは「invoke around」セマンティクスを持ちます。つまり、BeforeStepフックが実行された場合、ステップの結果に関係なくAfterStepフックも実行されます。ステップが失敗した場合、次のステップとそのフックはスキップされます。
BeforeStepフックをサポートしていません。
アノテーション付きメソッドスタイル
@BeforeStep
public void doSomethingBeforeStep(Scenario scenario){
}
ラムダスタイル
BeforeStep((Scenario scenario) -> {
});
ラムダスタイル
BeforeStep { scenario: Scenario ->
// doSomething
}
BeforeStep { scenario: Scenario =>
// doSomething
}
BeforeStep(async function({pickle, pickleStep, gherkinDocument, testCaseStartedId, testStepId}) {
// doSomething
})
BeforeStep({tags: "@foo"}, async function() {
// apply this hook to only specific scenarios
})
AfterStep do |scenario|
end
アノテーション付きメソッドスタイル
@AfterStep
public void doSomethingAfterStep(Scenario scenario){
}
ラムダスタイル
AfterStep((Scenario scenario) -> {
});
ラムダスタイル
AfterStep { scenario: Scenario ->
// doSomething
}
AfterStep { scenario: Scenario =>
// doSomething
}
AfterStep(async function({pickle, pickleStep, gherkinDocument, result, testCaseStartedId, testStepId}) {
// doSomething
})
フックは、シナリオのタグに基づいて実行対象を条件付きで選択できます。特定のシナリオに対してのみ特定のフックを実行するには、BeforeまたはAfterBeforeまたはAfterBeforeまたはAfter BeforeまたはAfter Before、After、Around、またはAfterStepフックをタグ式に関連付けることができます。
アノテーション付きメソッドスタイル
@After("@browser and not @headless")
public void doSomethingAfter(Scenario scenario){
}
ラムダスタイル
After("@browser and not @headless", (Scenario scenario) -> {
});
ラムダスタイル
After (arrayOf("@browser and not @headless")) { scenario: Scenario ->
driver.quit()
}
After("@browser and not @headless") { scenario: Scenario =>
}
Before({tags: '@browser and not @headless'}, async function () {
})
Before('@browser and not @headless') do
end
詳細については、タグに関するドキュメントを参照してください。
グローバルフックは、シナリオが実行される前に1回、またはすべてのシナリオが実行された後に1回実行されます。
コードをenv.rbファイル(またはfeatures/supportディレクトリの下の他のファイル)のトップレベルに配置します。
BeforeAllは、シナリオが実行される前に実行されます。
BeforeAll do
# Do something before any scenario is executed
end
const { BeforeAll } = require('@cucumber/cucumber');
BeforeAll(async function () {
// perform some shared setup
});
アノテーション付きメソッドスタイル
@BeforeAll
public static void beforeAll() {
// Runs before all scenarios
}
BeforeAll {
// doSomething
}
BeforeAll {
// doSomething
}
AfterAllは、すべてのシナリオが実行された後に実行されます。
AfterAll do
# Do something after all scenarios have been executed
end
const { AfterAll } = require('@cucumber/cucumber');
AfterAll(async function () {
// perform some shared setup
});
アノテーション付きメソッドスタイル
@AfterAll
public static void afterAll() {
// Runs after all scenarios
}
AfterAll {
// doSomething
}
AfterAll {
// doSomething
}
Cucumberの設定後に実行されるInstallPluginフックを提供することもできます。提供するブロックは、Cucumberの構成(Cucumber::Cli::Configurationのインスタンス)と、レジストリとしてのいくつかのCucumber内部へのラッパーに渡されます。
InstallPlugin do |config, registry|
puts "Features dwell in #{config.feature_dirs}"
end
このフックは、サポートがロードされた後、フィーチャがロードされる前に1回のみ実行されます。
このフックを使用して、Cucumberを拡張できます。たとえば、フィーチャのロード方法に影響を与えたり、プログラムでカスタムフォーマッタを登録したりできます。
cucumber-wireは、InstallPluginの使用方法と、Cucumberプラグインで何ができるかの良い例です。
Cucumber-JVMはInstallPluginフックをサポートしていません。Cucumber-JVMはInstallPluginフックをサポートしていません。Cucumber-JVMはInstallPluginフックをサポートしていません。 Cucumber.jsはInstallPluginフックをサポートしていません。
AfterConfigurationは、必要に応じてBeforeAllとInstallPluginに代わって非推奨になりました。
タグは、フィーチャとシナリオを整理するための優れた方法です。
これらは2つの目的で使用できます
次の例を考えてみましょう
@billing
Feature: Verify billing
@important
Scenario: Missing product description
Given hello
Scenario: Several products
Given hello
フィーチャまたはシナリオには、必要なだけ多くのタグを付けることができます。スペースで区切ります
@billing @bicker @annoy
Feature: Verify billing
タグは、次のGherkin要素の上に配置できます
フィーチャシナリオシナリオアウトライン例シナリオアウトラインでは、以下のように異なる例にタグを使用できます
Scenario Outline: Steps will run conditionally if tagged
Given user is logged in
When user clicks <link>
Then user will be logged out
@mobile
Examples:
| link |
| logout link on mobile |
@desktop
Examples:
| link |
| logout link on desktop |
バックグラウンドまたはステップ(Given、When、Then、And、But)の上にタグを配置することはできません。
タグは子要素によって継承されます。
フィーチャの上に配置されたタグは、シナリオ、シナリオアウトライン、または例によって継承されます。
シナリオアウトラインの上に配置されたタグは、例によって継承されます。
特定のタグを持つシナリオのみを実行するようにCucumberに指示できます。
JUnit 5については、cucumber-junit-platform-engineのドキュメントを参照してください。
JVMシステムプロパティを使用するJUnit 4およびTestNGの場合
mvn test -Dcucumber.filter.tags="@smoke and @fast"
または環境変数
# Linux / OS X:
CUCUMBER_FILTER_TAGS="@smoke and @fast" mvn test
# Windows:
set CUCUMBER_FILTER_TAGS="@smoke and @fast"
mvn test
または、JUnit 4/TestNGランナークラスを変更する
JUnit 5については、cucumber-junit-platform-engineのドキュメントを参照してください。
JVMシステムプロパティを使用するJUnit 4およびTestNGの場合
mvn test -Dcucumber.filter.tags="@smoke and @fast"
または環境変数
# Linux / OS X:
CUCUMBER_FILTER_TAGS="@smoke and @fast" mvn test
# Windows:
set CUCUMBER_FILTER_TAGS="@smoke and @fast"
mvn test
または、JUnit 4/TestNGランナークラスを変更する
JUnit 5については、cucumber-junit-platform-engineのドキュメントを参照してください。
JVMシステムプロパティを使用するJUnit 4およびTestNGの場合
mvn test -Dcucumber.filter.tags="@smoke and @fast"
または環境変数
# Linux / OS X:
CUCUMBER_FILTER_TAGS="@smoke and @fast" mvn test
# Windows:
set CUCUMBER_FILTER_TAGS="@smoke and @fast"
mvn test
または、JUnit 4/TestNGランナークラスを変更する
@CucumberOptions(tags = "@smoke and @fast")
public class RunCucumberTest {}
@CucumberOptions(tags = "@smoke and @fast")
class RunCucumberTest
@CucumberOptions(tags = "@smoke and @fast")
class RunCucumberTest {}
# You can omit the quotes if the expression is a single tag
./node_modules/.bin/cucumber.js --tags "@smoke and @fast"
# You can omit the quotes if the expression is a single tag
cucumber --tags "@smoke and @fast"
特定のタグを持つシナリオを無視するようにCucumberに指示できます。
JUnitランナークラスを使用する
JUnitランナークラスを使用する
JUnitランナークラスを使用する
@CucumberOptions(tags = "not @smoke")
public class RunCucumberTest {}
@CucumberOptions(tags = "not @smoke")
class RunCucumberTest
@CucumberOptions(tags = "not @smoke")
class RunCucumberTest {}
# You can omit the quotes if the expression is a single tag
./node_modules/.bin/cucumber.js --tags "not @smoke"
# You can omit the quotes if the expression is a single tag
cucumber --tags "not @smoke"
タグ式は、infix boolean expressionです。以下にいくつかの例を示します
| 式 | 説明 |
|---|---|
@fast |
@fast タグが付いたシナリオ |
@wip かつ @slow ではない |
@wip タグが付いていて、かつ @slow タグが付いていないシナリオ |
@smoke かつ @fast |
@smoke と @fast の両方のタグが付いたシナリオ |
@gui または @database |
@gui または @database のいずれかのタグが付いたシナリオ |
より高度なタグ式では、分かりやすくするために、または演算子の優先順位を変更するために、括弧を使用できます。
(@smoke or @ui) and (not @slow)
ドキュメントにタグを使用する場合、あなたの想像力が唯一の制限です。
タグは、要件管理ツール、課題追跡ツール、テスト管理ツールなどの外部システムのIDを参照できます。
@BJ-x98.77 @BJ-z12.33
Feature: Convert transaction
タグを外部ツールのドキュメントへのリンクに変換するカスタム Cucumber レポートプラグインを使用できます。
タグのもう1つの創造的な使用方法は、特定の機能が開発プロセスのどこにあるかを追跡することです。
@qa_ready
Feature: Index projects
Cucumber-Rails は、分散されているため、@wip タグを認識する Rake タスクを構築します。ただし、任意の文字列をタグとして使用でき、任意のシナリオまたはフィーチャー全体に複数のタグを関連付けることができます。
配布されている config/cucumber.yml に含まれるデフォルトプロファイルには、次の行が含まれています。
<%
. . .
std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} --strict --tags ~@wip"
%>
default: <%= std_opts %> features
. . .
末尾のオプション --tags ~@wip に注目してください。Cucumber は、--tags 引数の前にチルダ文字 (~) を付けることで、タグを否定する機能を提供します。これは、このタグが付いた機能とシナリオを処理しないように Cucumber に指示します。別のプロファイル (cucumber -p プロファイル名) を指定しない場合、デフォルトプロファイルが使用されます。デフォルトプロファイルが使用される場合、--tags ~@wip は、このタグが付いたシナリオを Cucumber がスキップさせます。これにより、コマンドラインで渡された --tags=@authen オプションが上書きされるため、次のようになります。
$ cucumber --tags=@authent
Using the default profile...
0 scenarios
0 steps
0m0.000s
バージョン 0.6.0 以降、コマンドラインで Cucumber 引数リストに --tags=@wip を追加しても、このデフォルト設定を克服することはできなくなりました。これは、すべての --tags オプションが AND で結合されるようになったためです。したがって、--tags @wip AND --tags ~@wip の組み合わせは、どこでも失敗します。
この問題を処理するには、config/cucumber.yml に特別なプロファイルを作成するか、デフォルトプロファイルをニーズに合わせて変更する必要があります。
@wip タグは特殊なケースです。@wip としてタグ付けされたシナリオがエラーなしでそのすべてのステップに合格し、かつ --wip オプションも渡された場合、Cucumber は実行を失敗として報告します (進行中の作業としてマークされているシナリオは合格するべきではないためです!)。
また、--strict オプションと --wip オプションは互いに排他的であることに注意してください。
特定のタグがフィーチャー内で発生する回数は、--tags オプションに渡されるタグ名の末尾にコロンと数値を付加することで制御できます。例:
$ cucumber --tags=@wip:3 features/log\*
特定の Cucumber 実行中に実行されるすべてのフィーチャー内で、指定された回数よりも多くそのタグが存在する場合、警告メッセージが生成されます。デフォルトプロファイルの場合と同様に、--strict オプションも渡された場合、警告ではなく実行が失敗します。
発生回数を制限することは、指定されていないシナリオの数を管理可能なレベルに制限するために、@wip タグと組み合わせてよく使用されます。カンバンまたはリーンソフトウェア開発ベースの方法論に従う人は、これが役立つと感じるでしょう。
Cucumber は、さまざまなツールやプラットフォーム向けの拡張機能を備えた Java ライブラリです。JUnit 4、JUnit 5、ビルドツール、IDE、または CLI を実行することで起動されます。
Cucumber は、さまざまなツールやプラットフォーム向けの拡張機能を備えた Java ライブラリです。JUnit 4、JUnit 5、ビルドツール、IDE、または CLI を実行することで起動されます。
Cucumber は、さまざまなツールやプラットフォーム向けの拡張機能を備えた Java ライブラリです。JUnit 4、JUnit 5、ビルドツール、IDE、または CLI を実行することで起動されます。
Cucumber はコマンドラインツールです。コマンドラインまたはビルドスクリプトから cucumber-js を実行することで起動されます。
Cucumber はコマンドラインツールです。コマンドラインまたはビルドスクリプトから cucumber を実行することで起動されます。
Cucumber がフィーチャーをどのように実行するかを構成することができます。
最も一般的なオプションは、コマンドラインから Cucumber を実行することです。デフォルトでは、Cucumber はルートライブラリディレクトリの下にある .rb で終わるものをステップ定義ファイルとして扱います。したがって、features/models/entities/step_definitions/anything.rb に含まれるステップは、次の条件が満たされていれば、features/views/entity_new に含まれるフィーチャーファイルで使用できます。
./features) で呼び出される; OR最も一般的なオプションは、コマンドラインから Cucumber を実行することです。デフォルトでは、Cucumber はルートディレクトリの下にある .js で終わるものをステップ定義ファイルとして扱います。したがって、次の条件が満たされていれば、features/models/entities/step-definitions/anything.js に含まれるステップはフィーチャーファイルで使用できます。
./features) で呼び出される; OR次のコマンドは、authenticate_user フィーチャーを実行します。features/ ディレクトリのサブディレクトリにあるフィーチャーは、フィーチャーを require する必要があります。
cucumber --require features features/authentication/authenticate_user.feature
--require オプションが渡された場合、ステップ定義の一致については、そのディレクトリツリーのみが検索されることに注意してください。便利なルートを共有しないディレクトリからステップ定義を含める必要がある場合は、--require オプションを複数回指定できます。
それ以外の場合は、すべてのフィーチャーを実行するには
cucumber
コマンドラインインターフェースランナー (CLI ランナー) は、コマンドラインから実行できる実行可能な Java クラスです。
java io.cucumber.core.cli.Main
コンパイルされた .class ファイルの場所に加えて、cucumber-core jar とそのすべての推移的な依存関係をクラスパスに追加する必要があることに注意してください。これらの jar は、Maven Central で見つけることができます。
また、--glue オプションの後にパッケージ名とフィーチャーファイルのファイルパスを指定して、CLI にステップ定義を提供する必要があります。
例えば
java -cp "path/to/each/jar:path/to/compiled/.class/files" io.cucumber.core.cli.Main /path/to/your/feature/files --glue hellocucumber --glue anotherpackage
または、Maven プロジェクトを使用している場合は、Exec Maven プラグインを使用して CLI を実行できます。
mvn exec:java \
-Dexec.classpathScope=test \
-Dexec.mainClass=io.cucumber.core.cli.Main \
-Dexec.args="/path/to/your/feature/files --glue hellocucumber --glue anotherpackage"
コマンドラインインターフェースランナー (CLI ランナー) は、コマンドラインから実行できる実行可能な Java クラスです。
java io.cucumber.core.cli.Main
コンパイルされた .class ファイルの場所に加えて、cucumber-core jar とそのすべての推移的な依存関係をクラスパスに追加する必要があることに注意してください。これらの jar は、Maven Central で見つけることができます。
また、--glue オプションの後にパッケージ名とフィーチャーファイルのファイルパスを指定して、CLI にステップ定義を提供する必要があります。
例えば
java -cp "path/to/each/jar:path/to/compiled/.class/files" io.cucumber.core.cli.Main /path/to/your/feature/files --glue hellocucumber --glue anotherpackage
または、Maven プロジェクトを使用している場合は、Exec Maven プラグインを使用して CLI を実行できます。
mvn exec:java \
-Dexec.classpathScope=test \
-Dexec.mainClass=io.cucumber.core.cli.Main \
-Dexec.args="/path/to/your/feature/files --glue hellocucumber --glue anotherpackage"
コマンドラインインターフェースランナー (CLI ランナー) は、コマンドラインから実行できる実行可能な Java クラスです。
java io.cucumber.core.cli.Main
コンパイルされた .class ファイルの場所に加えて、cucumber-core jar とそのすべての推移的な依存関係をクラスパスに追加する必要があることに注意してください。これらの jar は、Maven Central で見つけることができます。
また、--glue オプションの後にパッケージ名とフィーチャーファイルのファイルパスを指定して、CLI にステップ定義を提供する必要があります。
例えば
java -cp "path/to/each/jar:path/to/compiled/.class/files" io.cucumber.core.cli.Main /path/to/your/feature/files --glue hellocucumber --glue anotherpackage
または、Maven プロジェクトを使用している場合は、Exec Maven プラグインを使用して CLI を実行できます。
mvn exec:java \
-Dexec.classpathScope=test \
-Dexec.mainClass=io.cucumber.core.cli.Main \
-Dexec.args="/path/to/your/feature/files --glue hellocucumber --glue anotherpackage"
Cucumber.js には、フィーチャーを実行するための実行可能ファイルが含まれています。プロジェクトに Cucumber をインストールした後、次のコマンドで実行できます。
$ ./node_modules/.bin/cucumber.js
この実行可能ファイルには、cucumber-js および cucumberjs というエイリアスも設定されています。
ビルドツールまたはIDEを使用してフィーチャーを実行することもできます。
詳細については、cucumber-junit-platform-engine ドキュメントを参照してください。
詳細については、cucumber-junit-platform-engine ドキュメントを参照してください。
詳細については、cucumber-junit-platform-engine ドキュメントを参照してください。
Ruby は JUnit 5 で実行できません。
Javascript は JUnit 5 で実行できません。
JUnit を使用して Cucumber シナリオを実行するには、cucumber-junit 依存関係を pom に追加します。
<dependencies>
[...]
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
[...]
</dependencies>
cucumber-junit は JUnit 4 に基づいていることに注意してください。JUnit 5 を使用している場合は、cucumber-junit-platform-engine を使用するか、junit-vintage-engine 依存関係を含めます。詳細については、JUnit 5 ドキュメントを参照してください。
Cucumber JUnit ランナーを使用する空のクラスを作成します。
package com.example;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions()
public class RunCucumberTest {
}
package com.example
import io.cucumber.junit.Cucumber
import io.cucumber.junit.CucumberOptions
import org.junit.runner.RunWith
@RunWith(Cucumber::class)
@CucumberOptions()
class RunCucumberTest {
}
package com.example
import io.cucumber.junit.Cucumber
import io.cucumber.junit.CucumberOptions
import org.junit.runner.RunWith
@RunWith(classOf[Cucumber])
@CucumberOptions()
class RunCucumberTest {
}
これにより、デフォルトでは、ランナーと同じパッケージ内のすべてのシナリオが実行されます。グルーコードも同じパッケージ内にあると想定されます。
@CucumberOptions を使用して、ランナーに追加の構成を提供できます。
プラグインの使用
たとえば、Cucumber に pretty と html の 2 つのフォーマッタプラグインを使用するように指示する場合は、次のように指定できます。
JUnit を使用して Cucumber シナリオを実行するには、cucumber-junit 依存関係を pom に追加します。
<dependencies>
[...]
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
[...]
</dependencies>
cucumber-junit は JUnit 4 に基づいていることに注意してください。JUnit 5 を使用している場合は、cucumber-junit-platform-engine を使用するか、junit-vintage-engine 依存関係を含めます。詳細については、JUnit 5 ドキュメントを参照してください。
Cucumber JUnit ランナーを使用する空のクラスを作成します。
package com.example;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions()
public class RunCucumberTest {
}
package com.example
import io.cucumber.junit.Cucumber
import io.cucumber.junit.CucumberOptions
import org.junit.runner.RunWith
@RunWith(Cucumber::class)
@CucumberOptions()
class RunCucumberTest {
}
package com.example
import io.cucumber.junit.Cucumber
import io.cucumber.junit.CucumberOptions
import org.junit.runner.RunWith
@RunWith(classOf[Cucumber])
@CucumberOptions()
class RunCucumberTest {
}
これにより、デフォルトでは、ランナーと同じパッケージ内のすべてのシナリオが実行されます。グルーコードも同じパッケージ内にあると想定されます。
@CucumberOptions を使用して、ランナーに追加の構成を提供できます。
プラグインの使用
たとえば、Cucumber に pretty と html の 2 つのフォーマッタプラグインを使用するように指示する場合は、次のように指定できます。
JUnit を使用して Cucumber シナリオを実行するには、cucumber-junit 依存関係を pom に追加します。
<dependencies>
[...]
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
[...]
</dependencies>
cucumber-junit は JUnit 4 に基づいていることに注意してください。JUnit 5 を使用している場合は、cucumber-junit-platform-engine を使用するか、junit-vintage-engine 依存関係を含めます。詳細については、JUnit 5 ドキュメントを参照してください。
Cucumber JUnit ランナーを使用する空のクラスを作成します。
package com.example;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions()
public class RunCucumberTest {
}
package com.example
import io.cucumber.junit.Cucumber
import io.cucumber.junit.CucumberOptions
import org.junit.runner.RunWith
@RunWith(Cucumber::class)
@CucumberOptions()
class RunCucumberTest {
}
package com.example
import io.cucumber.junit.Cucumber
import io.cucumber.junit.CucumberOptions
import org.junit.runner.RunWith
@RunWith(classOf[Cucumber])
@CucumberOptions()
class RunCucumberTest {
}
これにより、デフォルトでは、ランナーと同じパッケージ内のすべてのシナリオが実行されます。グルーコードも同じパッケージ内にあると想定されます。
@CucumberOptions を使用して、ランナーに追加の構成を提供できます。
プラグインの使用
たとえば、Cucumber に pretty と html の 2 つのフォーマッタプラグインを使用するように指示する場合は、次のように指定できます。
package com.example;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(plugin = {"pretty", "html:target/cucumber.html"})
public class RunCucumberTest {
}
package com.example
import io.cucumber.junit.Cucumber
import io.cucumber.junit.CucumberOptions
import org.junit.runner.RunWith
@RunWith(Cucumber.class)
@CucumberOptions(plugin = {"pretty", "html:target/cucumber.html"})
class RunCucumberTest
package com.example;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(classOf[Cucumber])
@CucumberOptions(plugin = Seq("pretty", "html:target/cucumber.html"))
class RunCucumberTest {
}
たとえば、Cucumber に欠落しているステップ定義のコードスニペットを印刷するように指示する場合は、summary プラグインを使用すると、次のように指定できます。
たとえば、Cucumber に欠落しているステップ定義のコードスニペットを印刷するように指示する場合は、summary プラグインを使用すると、次のように指定できます。
たとえば、Cucumber に欠落しているステップ定義のコードスニペットを印刷するように指示する場合は、summary プラグインを使用すると、次のように指定できます。
package com.example;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(plugin = {"pretty", "summary"}, snippets = SnippetType.CAMELCASE)
public class RunCucumberTest {
}
package com.example
import io.cucumber.junit.Cucumber
import io.cucumber.junit.CucumberOptions
import org.junit.runner.RunWith
@RunWith(Cucumber.class)
@CucumberOptions(plugin = {"pretty", "summary"}, snippets = CAMELCASE)
class RunCucumberTest
package com.example;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(classOf[Cucumber])
@CucumberOptions(plugin = Seq("pretty", "summary"), snippets = CAMELCASE)
class RunCucumberTest {
}
snippets のデフォルトオプションは UNDERSCORE です。この設定は、Cucumber がコードスニペットを作成する方法を指定するために使用できます。
ドライランの実行
たとえば、すべてのフィーチャーファイルのステップに対応するステップ定義があるかどうかを確認する場合は、次のように指定できます。
snippets のデフォルトオプションは UNDERSCORE です。この設定は、Cucumber がコードスニペットを作成する方法を指定するために使用できます。
ドライランの実行
たとえば、すべてのフィーチャーファイルのステップに対応するステップ定義があるかどうかを確認する場合は、次のように指定できます。
snippets のデフォルトオプションは UNDERSCORE です。この設定は、Cucumber がコードスニペットを作成する方法を指定するために使用できます。
ドライランの実行
たとえば、すべてのフィーチャーファイルのステップに対応するステップ定義があるかどうかを確認する場合は、次のように指定できます。
package com.example;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(dryRun=true)
public class RunCucumberTest {
}
package com.example
import io.cucumber.junit.Cucumber
import io.cucumber.junit.CucumberOptions
import org.junit.runner.RunWith
@RunWith(Cucumber.class)
@CucumberOptions(dryRun=true)
class RunCucumberTest
package com.example;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(classOf[Cucumber])
@CucumberOptions(dryRun=true)
class RunCucumberTest {
}
dryRun のデフォルトオプションは false です。
コンソール出力のフォーマット
たとえば、Cucumber からのコンソール出力を読みやすい形式にしたい場合は、次のように指定できます。
dryRun のデフォルトオプションは false です。
コンソール出力のフォーマット
たとえば、Cucumber からのコンソール出力を読みやすい形式にしたい場合は、次のように指定できます。
dryRun のデフォルトオプションは false です。
コンソール出力のフォーマット
たとえば、Cucumber からのコンソール出力を読みやすい形式にしたい場合は、次のように指定できます。
package com.example;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(monochrome=true)
public class RunCucumberTest {
}
package com.example
import io.cucumber.junit.Cucumber
import io.cucumber.junit.CucumberOptions
import org.junit.runner.RunWith
@RunWith(Cucumber.class)
@CucumberOptions(monochrome=true)
class RunCucumberTest
package com.example;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(classOf[Cucumber])
@CucumberOptions(monochrome=true)
class RunCucumberTest {
}
monochrome のデフォルトオプションは false です。
タグを使用したシナリオの選択
たとえば、Cucumber に特定のタグで指定されたシナリオのみを実行するように指示する場合は、次のように指定できます。
monochrome のデフォルトオプションは false です。
タグを使用したシナリオの選択
たとえば、Cucumber に特定のタグで指定されたシナリオのみを実行するように指示する場合は、次のように指定できます。
monochrome のデフォルトオプションは false です。
タグを使用したシナリオの選択
たとえば、Cucumber に特定のタグで指定されたシナリオのみを実行するように指示する場合は、次のように指定できます。
package com.example;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(tags = "@foo and not @bar")
public class RunCucumberTest {
}
package com.example
import io.cucumber.junit.Cucumber
import io.cucumber.junit.CucumberOptions
import org.junit.runner.RunWith
@RunWith(Cucumber.class)
@CucumberOptions(tags = "@foo and not @bar")
class RunCucumberTest
package com.example;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(classOf[Cucumber])
@CucumberOptions(tags = Seq("@foo and not @bar"))
public class RunCucumberTest {
}
オブジェクトファクトリの指定
たとえば、DI フレームワークで Cucumber を使用していて、カスタムオブジェクトファクトリを使用したい場合は、次のように指定できます。
オブジェクトファクトリの指定
たとえば、DI フレームワークで Cucumber を使用していて、カスタムオブジェクトファクトリを使用したい場合は、次のように指定できます。
オブジェクトファクトリの指定
たとえば、DI フレームワークで Cucumber を使用していて、カスタムオブジェクトファクトリを使用したい場合は、次のように指定できます。
package com.example;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(objectFactory = FooFactory.class)
public class RunCucumberTest {
}
package com.example
import io.cucumber.junit.Cucumber
import io.cucumber.junit.CucumberOptions
import org.junit.runner.RunWith
@RunWith(Cucumber.class)
@CucumberOptions(objectFactory = FooFactory.class)
class RunCucumberTest
package com.example;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(classOf[Cucumber])
@CucumberOptions(objectFactory = FooFactory.class)
public class RunCucumberTest {
}
objectFactory のデフォルトオプションは、デフォルトのオブジェクトファクトリを使用することです。カスタムオブジェクトファクトリの使用に関する詳細については、こちらをご覧ください。
@CucumberOptions アノテーションには、追加のオプションを使用できます。
通常、テストクラスは空になります。ただし、いくつかの JUnit ルールを指定できます。
Cucumber ランナーは、JUnit テストのスイートのように機能します。そのため、カテゴリ、カスタム JUnit リスナー、レポーターなどの他の JUnit 機能もすべて動作すると予想できます。
JUnit の詳細については、JUnit ウェブサイトを参照してください。
objectFactory のデフォルトオプションは、デフォルトのオブジェクトファクトリを使用することです。カスタムオブジェクトファクトリの使用に関する詳細については、こちらをご覧ください。
@CucumberOptions アノテーションには、追加のオプションを使用できます。
通常、テストクラスは空になります。ただし、いくつかの JUnit ルールを指定できます。
Cucumber ランナーは、JUnit テストのスイートのように機能します。そのため、カテゴリ、カスタム JUnit リスナー、レポーターなどの他の JUnit 機能もすべて動作すると予想できます。
JUnit の詳細については、JUnit ウェブサイトを参照してください。
objectFactory のデフォルトオプションは、デフォルトのオブジェクトファクトリを使用することです。カスタムオブジェクトファクトリの使用に関する詳細については、こちらをご覧ください。
@CucumberOptions アノテーションには、追加のオプションを使用できます。
通常、テストクラスは空になります。ただし、いくつかの JUnit ルールを指定できます。
Cucumber ランナーは、JUnit テストのスイートのように機能します。そのため、カテゴリ、カスタム JUnit リスナー、レポーターなどの他の JUnit 機能もすべて動作すると予想できます。
JUnit の詳細については、JUnit ウェブサイトを参照してください。
Ruby は JUnit で実行できません。
Javascript は JUnit で実行できません。
Cucumber には、コマンドラインで渡すことができるいくつかのオプションが用意されています。
例えば
authenticate_user フィーチャーの 44 行目で定義されたシナリオを実行し、HTML としてフォーマットし、ブラウザで表示するために features.html ファイルにパイプするには
cucumber features/authenticate_user.feature:44 --format html > features.html
"Failed login" という名前のシナリオを実行するには
cucumber features --name "Failed login"
使用している Cucumber バージョンで使用可能なオプションを一覧表示できます。
Cucumber を gem としてインストールしたと仮定して、フィーチャーを実行するためのオプションを表示するには、コマンドプロンプトでこれを実行します。
cucumber --help
--help オプションを渡して、利用可能なすべての構成オプションを出力します。
java io.cucumber.core.cli.Main --help
--help オプションを渡して、利用可能なすべての構成オプションを出力します。
java io.cucumber.core.cli.Main --help
--help オプションを渡して、利用可能なすべての構成オプションを出力します。
java io.cucumber.core.cli.Main --help
実行可能ファイルに渡すことができる引数を確認するには、cucumber-js --help コマンドを使用してください。
実行する対象を指定するために、タグを使用することもできます。
Cucumberは、システムプロパティ、環境変数、cucumber.propertiesファイルの順に、優先順位に従ってプロパティを解析します。
@CucumberOptionsで提供されるオプションはプロパティファイルよりも優先され、CLI引数はすべてに優先されることに注意してください。
cucumber-junit-platform-engineには、CucumberではなくJunit Platformによってプロパティが提供されることに注意してください。詳細については、junit-platform-engine Configuration Optionsを参照してください。
たとえば、Mavenを使用しており、@smokeタグが付いたシナリオのサブセットを実行したい場合。
mvn test -Dcucumber.filter.tags="@smoke"
サポートされているプロパティは次のとおりです。
cucumber.ansi-colors.disabled= # true or false. default: false
cucumber.execution.dry-run= # true or false. default: false
cucumber.execution.limit= # number of scenarios to execute (CLI only).
cucumber.execution.order= # lexical, reverse, random or random:[seed] (CLI only). default: lexical
cucumber.execution.wip= # true or false. default: false.
cucumber.features= # comma separated paths to feature files. example: path/to/example.feature, path/to/other.feature
cucumber.filter.name= # regex. example: .*Hello.*
cucumber.filter.tags= # tag expression. example: @smoke and not @slow
cucumber.glue= # comma separated package names. example: com.example.glue
cucumber.plugin= # comma separated plugin strings. example: pretty, json:path/to/report.json
cucumber.object-factory= # object factory class name. example: com.example.MyObjectFactory
cucumber.snippet-type= # underscore or camelcase. default: underscore
フィルターオプションであるcucumber.filter.nameとcucumber.filter.tagsは、and演算を使用して結合されることに注意してください。つまり、両方の式が一致する必要があります。
Cucumberは、システムプロパティ、環境変数、cucumber.propertiesファイルの順に、優先順位に従ってプロパティを解析します。
@CucumberOptionsで提供されるオプションはプロパティファイルよりも優先され、CLI引数はすべてに優先されることに注意してください。
cucumber-junit-platform-engineには、CucumberではなくJunit Platformによってプロパティが提供されることに注意してください。詳細については、junit-platform-engine Configuration Optionsを参照してください。
たとえば、Mavenを使用しており、@smokeタグが付いたシナリオのサブセットを実行したい場合。
mvn test -Dcucumber.filter.tags="@smoke"
サポートされているプロパティは次のとおりです。
cucumber.ansi-colors.disabled= # true or false. default: false
cucumber.execution.dry-run= # true or false. default: false
cucumber.execution.limit= # number of scenarios to execute (CLI only).
cucumber.execution.order= # lexical, reverse, random or random:[seed] (CLI only). default: lexical
cucumber.execution.wip= # true or false. default: false.
cucumber.features= # comma separated paths to feature files. example: path/to/example.feature, path/to/other.feature
cucumber.filter.name= # regex. example: .*Hello.*
cucumber.filter.tags= # tag expression. example: @smoke and not @slow
cucumber.glue= # comma separated package names. example: com.example.glue
cucumber.plugin= # comma separated plugin strings. example: pretty, json:path/to/report.json
cucumber.object-factory= # object factory class name. example: com.example.MyObjectFactory
cucumber.snippet-type= # underscore or camelcase. default: underscore
フィルターオプションであるcucumber.filter.nameとcucumber.filter.tagsは、and演算を使用して結合されることに注意してください。つまり、両方の式が一致する必要があります。
Cucumberは、システムプロパティ、環境変数、cucumber.propertiesファイルの順に、優先順位に従ってプロパティを解析します。
@CucumberOptionsで提供されるオプションはプロパティファイルよりも優先され、CLI引数はすべてに優先されることに注意してください。
cucumber-junit-platform-engineには、CucumberではなくJunit Platformによってプロパティが提供されることに注意してください。詳細については、junit-platform-engine Configuration Optionsを参照してください。
たとえば、Mavenを使用しており、@smokeタグが付いたシナリオのサブセットを実行したい場合。
mvn test -Dcucumber.filter.tags="@smoke"
サポートされているプロパティは次のとおりです。
cucumber.ansi-colors.disabled= # true or false. default: false
cucumber.execution.dry-run= # true or false. default: false
cucumber.execution.limit= # number of scenarios to execute (CLI only).
cucumber.execution.order= # lexical, reverse, random or random:[seed] (CLI only). default: lexical
cucumber.execution.wip= # true or false. default: false.
cucumber.features= # comma separated paths to feature files. example: path/to/example.feature, path/to/other.feature
cucumber.filter.name= # regex. example: .*Hello.*
cucumber.filter.tags= # tag expression. example: @smoke and not @slow
cucumber.glue= # comma separated package names. example: com.example.glue
cucumber.plugin= # comma separated plugin strings. example: pretty, json:path/to/report.json
cucumber.object-factory= # object factory class name. example: com.example.MyObjectFactory
cucumber.snippet-type= # underscore or camelcase. default: underscore
フィルターオプションであるcucumber.filter.nameとcucumber.filter.tagsは、and演算を使用して結合されることに注意してください。つまり、両方の式が一致する必要があります。
cucumber.ymlファイルで共通のコマンドラインオプションを定義することもできます。
オプションの設定方法の詳細については、GitHubのcucumber-jsドキュメントを参照してください。
このドキュメントの改善にご協力ください。このページを編集してください。