加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

BDD场景多依赖

发布时间:2020-12-14 04:55:09 所属栏目:百科 来源:网络整理
导读:我使用.Net来自动化UI的SpecFlow.我已经定义了相同的功能和方案.我的问题是在执行主要场景之前场景依赖于其他场景我必须确保首先创建在同一个特征文件中定义为场景的所有相关数据,因此我将所有这些都放在后台.那么,当我要运行下一个依赖于我们已经使用Featur
我使用.Net来自动化UI的SpecFlow.我已经定义了相同的功能和方案.我的问题是在执行主要场景之前场景依赖于其他场景我必须确保首先创建在同一个特征文件中定义为场景的所有相关数据,因此我将所有这些都放在后台.那么,当我要运行下一个依赖于我们已经使用Feature 1st创建的相同场景的功能时,是否已经创建了?所以我们不需要再次执行相同的操作.

那么,有没有办法确保在运行任何场景之前,已经在UI级别执行/创建/呈现了后台场景.

解决方法

听起来好像你想要在几个不同的功能文件中有一个共同的背景.至少有两种不同的方法可以做到这一点:

复合步骤

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

挂钩上的标记过滤

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

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

这是我的功能文件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开始,如果指定了多个挂钩,则无法指定这些挂钩的执行顺序.

何时使用其中一种?

这取决于您是在设置技术问题还是业务问题.

使用标签来设置技术问题

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读