mcpField
S
specflow-skill

specflow-skill

github.com/lambdatest测试与质量384216 次安装2 周前更新
代码仓库

关于 specflow-skill

specflow-skill 是使用 SpecFlow 和 .NET 进行行为驱动测试的参考技能,涵盖 Gherkin 功能文件、步骤绑定、钩子、依赖注入和报告。

主要功能

  1. 01Gherkin 功能场景
  2. 02C# 步骤绑定
  3. 03场景钩子
  4. 04上下文注入
  5. 05LivingDoc HTML 报告
  6. 06云端执行配置

适用场景

  1. 01用 Gherkin 描述登录场景
  2. 02将步骤关联到 C# 代码
  3. 03在测试步骤间共享上下文
  4. 04生成 SpecFlow 报告

安装

复制下面的命令,在终端中运行。

$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);
}

报告:使用 SpecFlow+ LivingDoc 扩展生成丰富的 HTML 报告

深入了解模式

有关高级模式、调试指南、CI/CD 集成和最佳实践, 请参阅 reference/playbook.md。

评论

支持 Markdown