specflow-skill について
specflow-skillは、SpecFlowと.NETによる振る舞い駆動テストのリファレンススキルです。Gherkinの機能ファイル、ステップバインディング、フック、依存性注入、レポートを扱います。
主な機能
- 01Gherkinの機能シナリオ
- 02C#ステップバインディング
- 03シナリオフック
- 04コンテキスト注入
- 05LivingDocのHTMLレポート
- 06クラウド実行の設定
活用シーン
- 01Gherkinでログインシナリオを記述
- 02ステップをC#コードに接続
- 03テストステップ間でコンテキストを共有
- 04SpecFlowレポートの生成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ lambdatest/ agent-skills --skill specflow-skillインストール後、Claude Code で/specflow-skillを入力して読み込まれたか確認します。
同梱ファイルreference/advanced-patterns.mdreference/playbook.md
詳細
SpecFlow BDD スキル
基本パターン
フィーチャーファイル(Features/Login.feature)
Feature: User Login
Scenario: Successful login
Given I am on the login page
When I enter "[email protected]" as email
And I enter "password123" as password
And I click the login button
Then I should see the dashboard
And the welcome message should contain "Welcome"
Scenario: Invalid credentials
Given I am on the login page
When I enter "[email protected]" as email
And I enter "wrong" as password
And I click the login button
Then I should see error "Invalid credentials"
Scenario Outline: Login with various users
Given I am on the login page
When I enter "<email>" as email
And I enter "<password>" as password
And I click the login button
Then I should see "<result>"
Examples:
| email | password | result |
| [email protected] | admin123 | Dashboard |
| [email protected] | pass123 | Dashboard |
| [email protected] | wrong | Error |
ステップバインディング
using TechTalk.SpecFlow;
using NUnit.Framework;
[Binding]
public class LoginSteps
{
private readonly ScenarioContext _context;
private IWebDriver _driver;
public LoginSteps(ScenarioContext context)
{
_context = context;
_driver = (IWebDriver)_context["driver"];
}
[Given(@"I am on the login page")]
public void GivenIAmOnTheLoginPage()
{
_driver.Navigate().GoTo("http://localhost:3000/login");
}
[When(@"I enter ""(.*)"" as email")]
public void WhenIEnterEmail(string email)
{
_driver.FindElement(By.Id("email")).SendKeys(email);
}
[When(@"I enter ""(.*)"" as password")]
public void WhenIEnterPassword(string password)
{
_driver.FindElement(By.Id("password")).SendKeys(password);
}
[When(@"I click the login button")]
public void WhenIClickLogin()
{
_driver.FindElement(By.CssSelector("button[type='submit']")).Click();
}
[Then(@"I should see the dashboard")]
public void ThenIShouldSeeDashboard()
{
Assert.That(_driver.Url, Does.Contain("/dashboard"));
}
[Then(@"I should see error ""(.*)""")]
public void ThenIShouldSeeError(string error)
{
var element = _driver.FindElement(By.CssSelector(".error"));
Assert.That(element.Text, Does.Contain(error));
}
}
フック
[Binding]
public class Hooks
{
private readonly ScenarioContext _context;
public Hooks(ScenarioContext context) { _context = context; }
[BeforeScenario]
public void BeforeScenario()
{
var driver = new ChromeDriver();
_context["driver"] = driver;
}
[AfterScenario]
public void AfterScenario()
{
((IWebDriver)_context["driver"]).Quit();
}
}
依存性注入(コンテキスト注入)
// SpecFlow auto-injects ScenarioContext, FeatureContext, and custom POCOs
public class LoginSteps
{
private readonly LoginPage _loginPage;
public LoginSteps(LoginPage loginPage) { _loginPage = loginPage; }
}
セットアップ:dotnet add package SpecFlow.NUnit または SpecFlow.xUnit
実行:dotnet test
TestMu AI でのクラウド実行
環境変数を設定します:LT_USERNAME、LT_ACCESS_KEY
// Hooks.cs
[BeforeScenario]
public void Setup()
{
var ltOptions = new Dictionary<string, object>
{
{ "user", Environment.GetEnvironmentVariable("LT_USERNAME") },
{ "accessKey", Environment.GetEnvironmentVariable("LT_ACCESS_KEY") },
{ "build", "SpecFlow Build" },
{ "name", ScenarioContext.Current.ScenarioInfo.Title },
{ "platformName", "Windows 11" },
{ "video", true },
{ "console", true },
};
var options = new ChromeOptions();
options.AddAdditionalOption("LT:Options", ltOptions);
_driver = new RemoteWebDriver(
new Uri("https://hub.lambdatest.com/wd/hub"), options);
}
レポート:リッチな HTML レポートを生成する SpecFlow+ LivingDoc 拡張機能
応用パターン
高度なパターン、デバッグガイド、CI/CD 統合、ベストプラクティスについては、
reference/playbook.md を参照してください。
コメント
Markdown 対応