mcpField
C
cucumber-skill

cucumber-skill

github.com/lambdatestテスト・品質384267 回インストール2 週間前に更新
リポジトリ

cucumber-skill について

cucumber-skillは、振る舞い駆動テストを作成するチーム向けのCucumber資料です。Gherkin、JavaとJavaScriptのステップ定義、フック、タグ、実行方法を扱います。

主な機能

  1. 01Gherkinフィーチャーファイルのパターン
  2. 02JavaとJavaScriptのステップ定義
  3. 03フックとシナリオタグ
  4. 04タグによるテストの実行と絞り込み

活用シーン

  1. 01業務用語で振る舞いを記述
  2. 02JavaまたはJavaScriptでステップを実装
  3. 03指定したスモーク/回帰シナリオを実行
  4. 04クラウドテスト実行の設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/lambdatest/agent-skills --skill cucumber-skill

インストール後、Claude Code で/cucumber-skillを入力して読み込まれたか確認します。

同梱ファイルreference/advanced-patterns.mdreference/playbook.md

詳細

Cucumber BDD スキル

基本パターン

フィーチャーファイル(Gherkin)
Feature: User Login
  As a registered user
  I want to log into the application
  So that I can access my dashboard

  Background:
    Given I am on the login page

  Scenario: Successful login
    When I enter "[email protected]" in the email field
    And I enter "password123" in the password field
    And I click the login button
    Then I should be redirected to the dashboard
    And I should see "Welcome" on the page

  Scenario: Invalid credentials
    When I enter "[email protected]" in the email field
    And I enter "wrongpass" in the password field
    And I click the login button
    Then I should see an error message "Invalid credentials"

  Scenario Outline: Login with various users
    When I enter "<email>" in the email field
    And I enter "<password>" in the password field
    And I click the login button
    Then I should see "<result>"

    Examples:
      | email           | password    | result     |
      | [email protected]  | admin123    | Dashboard  |
      | [email protected]   | password    | Dashboard  |
      | [email protected]    | wrong       | Error      |
ステップ定義 — Java
import io.cucumber.java.en.*;
import static org.junit.jupiter.api.Assertions.*;

public class LoginSteps {
    private LoginPage loginPage;
    private DashboardPage dashboardPage;

    @Given("I am on the login page")
    public void iAmOnTheLoginPage() {
        loginPage = new LoginPage(driver);
        loginPage.navigate();
    }

    @When("I enter {string} in the email field")
    public void iEnterEmail(String email) {
        loginPage.enterEmail(email);
    }

    @When("I enter {string} in the password field")
    public void iEnterPassword(String password) {
        loginPage.enterPassword(password);
    }

    @When("I click the login button")
    public void iClickLogin() {
        dashboardPage = loginPage.clickLogin();
    }

    @Then("I should be redirected to the dashboard")
    public void iShouldBeOnDashboard() {
        assertTrue(driver.getCurrentUrl().contains("/dashboard"));
    }

    @Then("I should see {string} on the page")
    public void iShouldSeeText(String text) {
        assertTrue(dashboardPage.getPageSource().contains(text));
    }
}
ステップ定義 — JavaScript
const { Given, When, Then } = require('@cucumber/cucumber');
const { expect } = require('chai');

Given('I am on the login page', async function() {
  await this.page.goto('/login');
});

When('I enter {string} in the email field', async function(email) {
  await this.page.fill('#email', email);
});

When('I click the login button', async function() {
  await this.page.click('button[type="submit"]');
});

Then('I should see {string} on the page', async function(text) {
  const content = await this.page.textContent('body');
  expect(content).to.include(text);
});
フック
import io.cucumber.java.*;

public class Hooks {
    @Before
    public void setUp(Scenario scenario) {
        driver = new ChromeDriver();
    }

    @After
    public void tearDown(Scenario scenario) {
        if (scenario.isFailed()) {
            byte[] screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
            scenario.attach(screenshot, "image/png", "failure-screenshot");
        }
        driver.quit();
    }
}
タグ
@smoke
Feature: Login
  @critical @fast
  Scenario: Quick login
    ...

  @slow @regression
  Scenario: Full login flow
    ...
# Run by tag
mvn test -Dcucumber.filter.tags="@smoke"
mvn test -Dcucumber.filter.tags="@smoke and not @slow"
アンチパターン
悪い例良い例理由
Gherkin に UI の詳細を書くビジネス用語を使う読みやすさ
コードの各行に 1 つのステップを割り当てる意味のあるビジネスステップにする抽象化
共通ステップに Background を使わないBackground を使うDRY
命令型のステップ宣言型のステップ保守性
TestMu AI でのクラウド実行

環境変数を設定します:LT_USERNAME、LT_ACCESS_KEY

Java:

// CucumberHooks.java
ChromeOptions browserOptions = new ChromeOptions();
HashMap<String, Object> ltOptions = new HashMap<>();
ltOptions.put("user", System.getenv("LT_USERNAME"));
ltOptions.put("accessKey", System.getenv("LT_ACCESS_KEY"));
ltOptions.put("build", "Cucumber Build");
ltOptions.put("name", scenario.getName());
ltOptions.put("platformName", "Windows 11");
ltOptions.put("video", true);
browserOptions.setCapability("LT:Options", ltOptions);
driver = new RemoteWebDriver(new URL("https://hub.lambdatest.com/wd/hub"), browserOptions);

JavaScript:

const driver = new Builder()
  .usingServer(`https://${process.env.LT_USERNAME}:${process.env.LT_ACCESS_KEY}@hub.lambdatest.com/wd/hub`)
  .withCapabilities({ browserName: 'chrome', 'LT:Options': {
    user: process.env.LT_USERNAME, accessKey: process.env.LT_ACCESS_KEY,
    build: 'Cucumber Build', platformName: 'Windows 11', video: true
  }}).build();

クイックリファレンス

タスクコマンド
すべて実行(Java)cucumber-junit-platform-engine を使った mvn test
すべて実行(JS)npx cucumber-js
タグを指定して実行--tags "@smoke"
ドライラン--dry-run
スニペットを生成未定義のステップを実行

詳細なパターン → reference/playbook.md

§セクション内容
1プロジェクトのセットアップと設定Maven、ランナー、再実行
2フィーチャー作成のパターンBackground、アウトライン、DataTable
3ステップ定義型付きステップ、DI インジェクション
4依存性注入と共有状態PicoContainer、ScenarioContext
5フック(ライフサイクル管理)Before/After の順序、スクリーンショット
6カスタムパラメーター型トランスフォーマー、DocString
7並列実行スレッドセーフ、TestNG の並列実行
8レポートAllure、masterthought、JSON
9CI/CD 統合GitHub Actions、タグマトリックス
10デバッグのクイックリファレンスよくある 10 の問題
11ベストプラクティスのチェックリスト13 項目

コメント