何ですか Cucumber 機能ファイルとステップの定義? (例)

⚡ スマートサマリー

Cucumber フィーチャーファイルは、平易な言語のガーキンで動作を記述し、ステップ定義には各行を実行するコードが格納されます。 Cucumber プロジェクトには両方が必要で、フィーチャーディレクトリの下の固定フォルダレイアウトに格納されます。

  • 🔘 2つのファイル: フィーチャーファイルは、何が起こるべきかを記述し、ステップ定義ファイルは、自動化によってそれがどのように実現されるかを記述します。
  • ☑️ ガーキンのキーワード: 特徴、シナリオ、前提条件、条件、そしてその後は、シナリオの構造と読みやすい形を規定する。
  • ✅ ステップにコロンは使用しません。 FeatureとScenarioにはコロンが必要ですが、Given、When、Thenにはコロンが必要です。コロンがあると、そのステップは無視されます。
  • 🧪 データセット: シナリオ概要と例表を組み合わせることで、1つのシナリオを複数の入力行に対して再現できます。
  • 🛠️ 共有設定: 背景は、フィーチャー内の各シナリオから繰り返されるGivenステップを持ち上げます。
  • 📊 マッチング: Cucumber マッチング時にキーワードを無視するため、2つのステップで同じテキストが使用されることはありません。

Cucumber フィーチャーファイルとステップ定義を例を用いて解説

すべてのCucumberプロジェクトには、プロジェクトのルートディレクトリに「features」という名前のディレクトリが1つあります。ここにすべてのCucumberフィーチャーが格納されます。このディレクトリ内には、step_definitionディレクトリとsupportディレクトリという追加のディレクトリがあります。

そのレイアウトが重要な理由は、 Cucumber 設定ではなく、慣例に基づいてファイルを見つけ出します。features ディレクトリの外にあるフィーチャーファイルは、決して読み込まれません。

「フィーチャーファイル」とは何ですか?

機能ファイルには、次の高レベルの説明が含まれています。 テストシナリオ 簡単に言うと、 ガーキンGherkinは平易な英語のテキスト言語です。

Cucumber フィーチャーファイルは以下のコンポーネントで構成されます。

  • 機能: 機能は、実行する必要がある現在のテスト スクリプトを記述します。
  • シナリオ: シナリオは、特定のテスト ケースの手順と期待される結果を説明します。
  • シナリオ概要: シナリオアウトラインを使用すると、複数のデータに対して同じシナリオを実行できます。 データは (II) で区切られた表構造によって提供されます。
  • 与えられた: 実行するテキストのコンテキストを指定します。 データテーブル「Given」を使用することで、ステップをパラメータ化することもできます。
  •   「When」は、実行する必要のあるテストアクションを指定します。
  • その後テストの期待される結果は「Then」で表すことができます。

1つのファイルには1つの機能が格納されます。その下のシナリオは、その機能を説明する具体的な例であり、各シナリオは同じ構成になっています。つまり、開始状況の説明、イベントの説明、期待される結果の説明です。

次に、フィーチャーファイルの書き方を学びます。 Cucumber 例を挙げて説明します。

サンプル機能ファイルの例:

このチュートリアルに掲載されている元のサンプルコードは、以下に原文のまま再現します。

Feature: Visit career guide page in career.guru99.com
Scenario: Visit career.guru99.com
Given: I am on career.guru99.com
When: I click on career guide menu
Then: I should see career guide page

⚠️訂正: 上記の例ではコロンが 与えられた,    (NAIST) と その後ガーキンはコロンを 機能 (NAIST) と シナリオ のみ。ステップキーワードの後に​​コロンが続く場合、ステップとして解析されないため、 Cucumber その行は黙って無視されます。修正後のファイルの内容は以下のとおりです。

Feature: Visit career guide page in career.guru99.com

  Scenario: Visit career.guru99.com
    Given I am on career.guru99.com
    When I click on career guide menu
    Then I should see career guide page

パーサーはインデントを必須としていませんが、各レベルに2つのスペースを入れるのが一般的なスタイルであり、長いフィーチャーをはるかに読みやすくします。下の動画は、フィーチャーファイルが実行され、各ステップが通過するにつれて緑色に変わっていく様子を示しています。

アニメーション Cucumber 各Gherkinステップが順番に報告されるフィーチャーファイルが実行されています

「ステップ定義」とは何ですか?

ステップ定義は、機能ファイル (Given/When/Then によって導入される) のテスト ケース ステップをコードにマップします。 これは、テスト対象のアプリケーションのステップを実行し、期待される結果と比較して結果をチェックします。 ステップ定義を実行するには、ステップ定義がフィーチャー内の指定されたコンポーネントと一致する必要があります。 ステップ定義は、「features/step_settings/*_steps.rb」の下の Ruby ファイルで定義されます。

マッチングは、ステップのテキストのみに基づいて行われます。 Cucumber 定義を検索する際にキーワードを考慮しないため、同じスイート内の 2 つのステップが、一方が Given で他方が Then であっても、まったく同じテキストを持つことはありません。

ステップ定義の例: ここでは上記を使用します Cucumber career.guru99.com を閲覧する際のフィーチャーファイルの例です。以下に示すように、「When、Then、Given」などの機能を使用します。 Cucumber 機能ファイルの例。

Step 1:

Given (/^ I am on career.guru99.com$/) do

Browser.goto "http://career.guru99.com" -This will visit career.guru99 on browser

end

Step 2:
When (/^ click on career guide menu$/) do

Browser.text (:name, " career guide" ).click – This will click "career guide menu"

end

Step 3:

Then (/^ I should see career guide page$/) do

Browser.goto "http://career.guru99.com/category/career-guide/" - It will visit "career guide page"

end

⚠️ 言語に関する注意点: 上記の定義はRubyです。 Cucumber 開始したので、フォルダ名は step_definitions ファイルは以下で終わります _steps.rb同じフィーチャーファイルが、 Java, Javaスクリプト、 Python または、Gherkinに一切変更を加えることなくC#で。 Cucumber-JVMでは、正規表現がメソッドのアノテーションに移動します。

@Given("I am on career.guru99.com")
public void i_am_on_the_career_page() {
    driver.get("http://career.guru99.com");
}

どの言語を選択しても、ステップ定義は実装の詳細を記述する唯一の場所です。ping フィーチャーファイルからセレクタとHTTP呼び出しを抜き出すことで、プログラマー以外の人でもシナリオを読めるようになります。 最初の Cucumber スクリプト このチュートリアルでは、このペアリングを最初から最後まで構築していきます。

フィーチャーファイル内のシナリオ概要と例

1つの値を変更するためにシナリオを3回コピーすることは、フィーチャーファイルが読み取れなくなる最も一般的な原因です。 シナリオ概要 コピーをテンプレートに置き換え、 例 表に値が記載されています。

パラメータは山括弧で囲んで記述し、その下の表の列見出しと一致させる必要があります。 Cucumber 一致するステップ定義を探す前に値を置き換えるため、定義自体に特別な処理は必要ありません。

Scenario Outline: Search the career guide
  Given I am on career.guru99.com
  When I search for "<keyword>"
  Then I should see the <section> section

  Examples:
    | keyword   | section       |
    | interview | Interview Tips|
    | resume    | Resume Guide  |

アウトラインを使用する際に覚えておくと良い点がいくつかあります。

  • アウトラインはデータ行ごとに1回実行されます。最初の行はヘッダーであり、実行されることはありません。
  • シナリオ概要の後には、少なくとも1つの例セクションが続く必要があります。そうでない場合、何も実行されません。
  • テーブル内のパイプは必ずしも一直線に並ぶ必要はありませんが、一直線に並ぶことでファイルの読み取りやすさが向上します。
  • テーブルは小さく保ちましょう。30行のテーブルは通常、データが データ駆動型テスト を代わりにお使いください。

背景、そして、しかし、その他のガーキンのキーワード

先に挙げた6つの構成要素以外にも、Gherkinには、より長いフィーチャーファイルを読みやすくするためのキーワードがいくつかあります。

  • 経歴 — フィーチャー内のすべてのシナリオの前に実行される、Givenステップのブロック。これにより、各シナリオの先頭に同じ前提条件を記述する手間が省けます。
  • (NAIST) と だけど — 繰り返し出現する Given、When、Then の代替。読みやすく、動作も同じです。 Cucumber どちらの場合も、手順テキストに一致します。
  • ルール — オプショングループpingGherkin 6で追加された、1つのビジネスルールを説明するシナリオを収集する機能。
  • ドキュメント文字列 — 3つの二重引用符で囲まれたテキストブロック。1行では不十分な場合に、単一の引数としてステップ定義に渡されます。
  • データテーブル — パイプ区切りの行で、単一のステップに添付され、そのステップに値のリストを渡すために使用されます。
  • タグ — フィーチャーまたはシナリオの上に配置され、実行時にサブセットを選択できるようにするための、アットマークで始まるラベル。
  • コメント — ハッシュ記号で始まる行。コメントは行頭にのみ記述可能で、Gherkinにはブロックコメントはありません。

まとめると、共有設定を含むフィーチャーファイルは次のようになります。

Feature: Career guide navigation

  Background:
    Given I am on career.guru99.com

  Scenario: Open the career guide menu
    Given I am signed in
    And my profile is complete
    When I click on career guide menu
    Then I should see career guide page
    But I should not see the admin panel

フィーチャーファイルでよくある間違いとその修正方法

ブリッジ Cucumber 初心者から報告される問題は、フレームワークの欠陥ではありません。それらは、Gherkinのルールに違反する小さな問題であり、静かに発生するものです。

間違い 何が起こるのですか 修正する
Given、When、またはThenの後のコロン この行はステップとして認識されず、スキップされます。 FeatureとScenarioの後にのみコロンを使用してください。
同じテキストの2つのステップ Cucumber キーワードが無視されるため、重複として扱われます 1つのステップを書き換えて、2つの文章が異なって見えるようにする
features ディレクトリ外にあるフィーチャーファイル ファイルは発見されず、テストも実行されません。 すべての .feature 機能フォルダ内のファイル
1つのシナリオで15ステップ シナリオはドキュメントに従って動作しなくなります 3~5ステップを目指し、各ステップの定義に詳細を盛り込む。
次にデータベース行に対してアサートする ユーザーから見える動作が壊れているにもかかわらず、テストは合格する。 ページやレスポンスなどの観測可能な出力に対してアサートする
例のないシナリオ概要表 テンプレートは実行されません アウトラインのすぐ下に「例」セクションを追加する

スイートが大きくなる前にこれらを修正する方が、後で修正するよりもはるかに安価です。なぜなら、その間に書かれたすべてのシナリオは同じ形状をコピーするからです。フィーチャー ファイルが正しく動作したら、次のステップはプロジェクトを接続することです。 Cucumber インストール ウォークスルーとより広い 自動化テスト シリーズ。

よくあるご質問

いいえ。.feature ファイルには、厳密に 1 つのフィーチャーのみを宣言できますが、シナリオはいくつでも記述できます。2 つ目のフィーチャーが必要な場合は、別のファイルを作成してください。この制約により、スイートが拡大してもフォルダのナビゲーションが維持されます。

そうではありません。Gherkinは70以上の言語に対応しています。ファイルの最初の行に言語ヘッダーを追加するとキーワードが切り替わるため、チームはドメインエキスパートが実際に話す言語でシナリオを作成できます。

ステップ定義以外のすべて、つまり環境設定、ブラウザ構成、シナリオの前後に実行されるフック、共有ヘルパーコードなどが含まれます。ping 個別の停止ステップ定義ファイルがダムになるのを防ぐping 接地。

Cucumber ステップが失敗したのではなく未定義として報告され、ステップ定義ファイルに貼り付けることができる推奨コードスニペットが出力されます。シナリオは不合格としてマークされるため、未定義のステップが成功としてカウントされることはありません。

フィーチャーまたはシナリオの上にタグを配置すると、ランナーはフォルダー構造に関係なく、実行時にサブセットを選択できます。チームは一般的に、スモークセット、スローセット、および作業中セットにタグを付け、特定のパイプラインステージに必要なものだけを実行します。

大規模な言語モデルは、受け入れ基準に基づいてGherkinをうまくドラフトし、対応する定義の骨組みをさらに高速に生成します。 Rev重複したステップテキストや、実装の詳細が漏れているシナリオについて出力を確認してください。生成されたGherkinは通常、このような場合に問題が発生します。

非常にそうです。Copilotは、開いているフィーチャーファイルから未定義ステップの正規表現とメソッドシグネチャを推測し、周囲のコードから本体を補完します。これはあくまでも最初のドラフトであり、Copilotが提案するアサーションは人間による確認が必要です。

はい、それがこの設計の要点です。定義は共有フォルダに格納され、ファイルではなくテキストで照合されるため、一度記述したログイン手順は、それを必要とするすべての機能で再利用されます。重複した手順テキストが禁止されているのは、この再利用性を実現するためです。