BDD 场景多重依赖

标签 bdd specflow

我正在使用 SpecFlow 使用 .Net 来自动化 UI。我已经定义了相同的功能和场景。我的问题是,在执行主要场景之前,场景依赖于其他场景,我必须确保首先创建在同一功能文件中定义为场景的所有依赖数据,因此我将所有这些数据放在后台。那么,当我要运行下一个功能时,该功能也依赖于我们已经使用第一个功能创建的相同场景,该功能是否已经创建?所以我们不需要再次执行相同的操作。

那么,有什么方法可以确保在运行任何场景之前,后台场景已经在 UI 级别上执行/创建/呈现。

最佳答案

听起来好像您希望在几个不同的功能文件中拥有共同的背景。至少有两种不同的方法可以做到这一点:

复合步骤

实现此目的的一种方法是 AlSki 提出的方法,即创建一个调用许多其他步骤的复合步骤。我不会在这里重新定义这一点,因为他的回复做得很好。您可以在任何您喜欢的功能中从任何场景(或背景)调用此复合步骤(调用多个步骤的步骤)。

钩子(Hook)上的标签过滤

另一种方法是使用 Hooks在 SpecFlow 中定义,如 [BeforeScenario] 在每个场景之前运行一些代码。您可以使用标签过滤(请参阅 Hook 链接)通过将相应的标签添加到场景或功能来指定要运行的 Hook 。让我用一个例子来演示一下:

假设我有使用 Selenium 执行的场景来驱动 Web 浏览器,但并非所有场景都使用 Selenium。如果我只想为需要的场景设置 Selenium,我可以创建一个 BeforeScenario Hook ,该 Hook 仅在场景具有标签 @web 时执行。

这是我的功能文件LoggingIn.feature:

Feature: Logging In

@web
Scenario: Log In
    Given I am on the login page
    When I supply valid credentials
    Then I should be taken to the homepage

这是我的步骤定义文件StepDefinitions.cs:

[Binding]
public class StepDefinitions
{
    [BeforeScenario("web")]
    public static void BeforeWebScenario()
    {
        // Code to startup selenium
    }

    [BeforeScenario]
    public static void BeforeAllScenarios()
    {
        // Code that executes before every scenario...regardless of tag.
    }
}

对于任何具有 @web 标记的场景,BeforeAllScenarios()BeforeWebScenario() 都将在该场景之前执行。对于没有 @web 标记的场景,仅执行 BeforeAllScenarios() 方法。

通过这种方式,您可以通过将特定属性应用于场景来运行一组代码。

仅供引用:从 SpecFlow 1.9 开始,如果指定了多个钩子(Hook),您将无法指定这些钩子(Hook)的执行顺序。

何时使用其中之一?

这取决于您是要提出技术问题还是业务问题。

使用标签设置技术问题

如果您想设置业务用户不需要了解的测试的某些技术方面,我将使用标签方法。我提出的一个很好的例子...设置 Selenium。业务用户可能不太关心 Selenium 是什么,因此在场景中创建一个步骤来设置它是没有意义的。

使用复合步骤来设置业务问题

如果您需要指定业务用户关心的系统状态(例如登录用户或现有产品数据),那么这应该是场景(或后台)中的另一个步骤。这是因为这些步骤应包括从业务角度阅读和理解行为所需的一切。

关于BDD 场景多重依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12814295/

相关文章:

c# - xUnit : Mutiple Assertions or Soft Assert

.net - 可以将报告发送到 ReportPortal for .net (Specflow) 中的一次启动

MSBuild:添加其他文件进行编译,无需更改项目文件

bdd - 行为驱动开发和 SpecFlow

c# - MSpec 替代 winrt 应用程序中的 BDD 样式单元测试

javascript - 如何测试函数在一段时间后是否发出事件?

c# - Specflow - 完成所有测试后关闭浏览器

c# - Specflow - 作为功能文件/BDD 的一部分涵盖的测试类型是什么

c# - 有没有办法按所需顺序运行 Specflow 场景(C# Selenium)?

c# - 如何使用 SpecFlow 设置个人跟踪/日志记录