用語集 · UI 自動化
Gherkin(ガーキン)
英語: Gherkin
別名: ガーキン, Gherkin記法, Given-When-Then, Given/When/Then
定義
BDD のシナリオを .feature ファイルに書くための Given-When-Then 形式のプレーンテキスト構文で、Cucumber などのツールが自動テストとして実行します。
Gherkin は、ソフトウェアの振る舞いを具体例として記述するための、小さな構造化言語です。各ファイルは .feature という拡張子を持ち、複数の Scenario からなる 1 つの Feature を含みます。各シナリオは Given(前提)、When(操作)、Then(期待結果)で始まるステップの並びです。Cucumber などのツールは各ステップをコード内のステップ定義に対応付けるので、同じテキストがドキュメントであると同時に自動テストにもなります。
具体例
Feature: Password reset
Background:
Given a registered user "ada@example.com"
Scenario: Reset link is sent for a known email
When she requests a password reset for "ada@example.com"
Then a reset email is sent to "ada@example.com"
And the link expires after 30 minutes
Scenario Outline: Weak passwords are rejected
When she sets her new password to "<password>"
Then she sees the error "<message>"
Examples:
| password | message |
| abc | Use at least 12 characters |
| password | This password is too common |
対応する Java と Cucumber のステップ定義は次のとおりです。
@When("she sets her new password to {string}")
public void setNewPassword(String password) {
resetPage.setPassword(password);
}
知っておきたいキーワード
And/Butは読みやすさのために、直前のステップの種類を引き継ぎます。Backgroundはファイル内のすべてのシナリオの前に実行されます。短く保ちます。Scenario OutlineとExamplesは表の行ごとにシナリオを 1 回実行します。Gherkin 形式のデータ駆動テストです。- シナリオの上に付ける
@smokeや@wipなどの タグ で、実行するサブセットを選択できます。 Rule(Gherkin 6 以降)は、シナリオを、それが例示するビジネスルールの下にグループ化します。
良いシナリオの書き方
- 1 シナリオに 1 つの振る舞い。
When/Thenの組が複数あるなら、たいていは 2 つのシナリオに分けるべきです。 - 命令的ではなく宣言的に。 「パスワードのリセットを要求する」の方が、フィールドへの入力やボタンのクリックを 3 ステップで書くより優れています。
- 具体的な値。 実際の例(「120.00」「Gold」)は、あいまいな表現(「大口の注文」)では隠れてしまう誤解を明らかにします。
- 三人称または一貫したペルソナ。 「私」「ユーザー」「名前付きのペルソナ」が混在すると、ステップライブラリが膨れ上がります。