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

ステップ定義にを渡す最も簡単な方法は、データテーブルを使用することです。

Given the following animals:
  | cow   |
  | horse |
  | sheep |

引数をとして宣言しますが、式でを定義しないでください。

この場合、DataTableは、ステップ定義を呼び出す前に、Cucumberによって自動的ににフラット化されます(DataTable.asList(String.class)を使用)。

ステップ

ステップは、メソッド呼び出しまたは関数呼び出しに似ています。

例えば

Given I have 93 cucumbers in my belly

このステップでは、上記のステップ定義を1つの引数(値93)で「呼び出し」ています。

ステップは、ファイルで宣言されます。

ステップのマッチング

  1. Cucumberは、ステップをステップ定義のRegexpと照合します
  2. Cucumberは、または変数を収集します。
  3. Cucumberは、それらをステップ定義のに渡し、実行します

ステップ定義が、前置詞または副詞GivenWhenThenAndBut)で始まることを思い出してください。

すべてのステップ定義は、Cucumberがフィーチャーファイルのプレーンテキストの実行を開始する前にロード(および定義)されます。

実行が開始されると、各ステップについて、Cucumberは一致するRegexpで登録されたステップ定義を探します。それが見つかった場合、と、Regexpからの変数をすべて引数としてに渡し、実行します。

Cucumberがステップ定義を登録または検索するとき、使用される特定の前置詞/副詞は重要ではありません

ステップ定義にテーブル全体または大きな文字列を渡す方法の詳細については、複数行のステップ引数も確認してください。

ステップの結果

各ステップは、次のいずれかの結果を持つことができます

成功

Cucumberが一致するステップ定義を見つけると、それを実行します。ステップ定義のブロックでエラーが発生しない場合、ステップは成功(緑色)としてマークされます。ステップ定義からreturnするものは、まったく意味がありません。

未定義

Cucumberが一致するステップ定義を見つけることができない場合、ステップは未定義(黄色)としてマークされ、シナリオ内の後続のすべてのステップはスキップされます。

保留中

ステップ定義のpendingを呼び出すと、ステップは保留中(undefinedの場合と同様に黄色)としてマークされ、作業が必要であることを示します。

失敗したステップ

ステップ定義のが実行されてエラーが発生した場合、ステップは失敗(赤色)としてマークされます。ステップ定義から返すものは、まったく意味がありません。

またはfalseを返しても、ステップ定義が失敗することはありません。

スキップ

undefinedpending、またはfailedのステップに続くステップは、一致するステップ定義があっても実行されません。これらのステップは、スキップ(シアン)としてマークされます。

曖昧

ステップ定義は、Cucumberがどの処理を実行すべきかを判断するために一意である必要があります。曖昧なステップ定義を使用すると、 曖昧さを修正するように指示されます。

フック

フックは、Cucumberの実行サイクル中のさまざまな時点で実行できるコードブロックです。通常、各シナリオの前後の環境のセットアップとティアダウンに使用されます。

フックが定義されている場所は、どのシナリオまたはステップで実行されるかに影響しません。より細かい制御が必要な場合は、条件付きフックを使用できます。

シナリオフック

シナリオフックは、すべてのシナリオで実行されます。

Before

Beforeフックは、各シナリオの最初のステップの前に実行されます。

Beforeを使用する前に再考する

Beforeフックで発生することは、フィーチャを読むだけの人には見えません。特に、セットアップが非技術者にも読めるようにする必要がある場合は、より明確な代替手段としてバックグラウンドの使用を検討する必要があります。ブラウザの起動やデータベースからのデータの削除などの低レベルロジックにのみBeforeフックを使用してください。

After

Afterフックは、ステップの結果がfailedundefinedpending、またはskippedの場合でも、各シナリオの最後のステップの後に実行されます。

scenarioパラメーターはオプションです。これを使用すると、シナリオのステータスを確認できます。

たとえば、失敗したシナリオに対してでスクリーンショットを撮り、Cucumberのレポートに埋め込むことができます。

その方法の例については、ブラウザ自動化ページを参照してください。

Around

ステップフック

BeforeStep

AfterStep

条件付きフック

フックは、シナリオのタグに基づいて実行対象を条件付きで選択できます。特定のシナリオに対してのみ特定のフックを実行するには、 フックをタグ式に関連付けることができます。

詳細については、タグに関するドキュメントを参照してください。

グローバルフック

グローバルフックは、シナリオが実行される前に1回、またはすべてのシナリオが実行された後に1回実行されます。

BeforeAll

BeforeAllは、シナリオが実行される前に実行されます。

AfterAll

AfterAllは、すべてのシナリオが実行された後に実行されます。

InstallPlugin

AfterConfiguration

AfterConfigurationは、必要に応じてBeforeAllInstallPluginに代わって非推奨になりました。

タグ

タグは、フィーチャとシナリオを整理するための優れた方法です。

これらは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 |

バックグラウンドまたはステップ(GivenWhenThenAndBut)の上にタグを配置することはできません

タグの継承

タグは子要素によって継承されます。

フィーチャの上に配置されたタグは、シナリオシナリオアウトライン、またはによって継承されます。

シナリオアウトラインの上に配置されたタグは、によって継承されます。

シナリオのサブセットを実行する

特定のタグを持つシナリオのみを実行するようにCucumberに指示できます。

シナリオのサブセットを無視する

特定のタグを持つシナリオを無視するようにCucumberに指示できます。

行によるフィルタリング

シナリオのサブセットを実行する別の方法は、file.feature:lineパターンまたは--scenarioオプションを使用することです。

タグ式

タグ式は、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 の実行

Cucumber がフィーチャーをどのように実行するかを構成することができます。

コマンドラインから

ビルドツールまたはIDEを使用してフィーチャーを実行することもできます。

JUnit 5

JUnit 4

オプション

Cucumber には、コマンドラインで渡すことができるいくつかのオプションが用意されています。

構成オプションの一覧

使用している Cucumber バージョンで使用可能なオプションを一覧表示できます。

実行する対象を指定するために、タグを使用することもできます。

このドキュメントの改善にご協力ください。このページを編集してください。