【问题标题】:Equivalent of Background to run after scenarios等效于在场景之后运行的背景
【发布时间】:2012-06-11 11:05:55
【问题描述】:

我是 SpecFlow 的新手,正在为不同角色类型的经过身份验证的用户设置许多测试功能/场景。我通过 Coypu 的浏览器自动化来做到这一点。

所以我在功能中有一个后台步骤来设置该角色类型的用户的登录。

Background:
    Given I am logged in as a ...some role I'm interested in...

在功能中的每个场景之后,我想再次注销用户(否则后台的登录步骤将不适用于下一个场景——我在测试之间保持相同的 Coypu 浏览器实例打开)。

我找到了可以使用的 [AfterScenario] 注释,但由于它适用于所有功能的所有场景(据我所知......),它会影响未经身份验证用户的场景。

我相信我可以将[AfterScenario][Scope(Feature="Some Feature")] 限定范围,但我预计必须在我正在测试的大量功能之前和之后登录/注销,我并不热衷于指定所有这些都带有一堆魔术字符串。

所以我想知道是否可以在功能文件中放入一些东西,类似于背景,但要在该功能中的每个场景之后运行。 (或者,也许我为每个场景登录/注销的方式不是处理事情的最佳方式?)

【问题讨论】:

    标签: specflow gherkin


    【解决方案1】:

    specflow 中没有“Postground”功能,但是您可以使用tags filtering 实现类似的功能。

    在我们的大多数项目中,我们使用标签来标记具有特定设置/拆卸逻辑的场景。 然后我们使用 BeforeScenario/AfterScenario 钩子来执行逻辑:

    [BeforeScenario("authentication")]
    public void BeforeAuthenticationScenario()
    {
        //...
    }    
    
    [AfterScenario("authentication")]
    public void AfterAuthenticationScenario()
    {
        //...
    }
    

    您可以标记单个场景或整个功能:

    @authentication
    Feature: Some feature requires authentication
    
    @authentication
    Scenario: Some scenario requires authentication
    

    因此,在您的代码中,您将只有一个魔术字符串“身份验证”,而在您的功能中,您可以使用标签以声明方式应用自定义逻辑。

    【讨论】:

    • 谢谢,这看起来是个好方法。只是出于您的兴趣,您认为“Postground”之类的功能是否有用,或者您认为它不存在是有原因的?
    • A 还没有真正考虑过它,但直到你可以从带有标签的代码中做到这一点,这并不是什么大问题。目前正在讨论 SpecFlow 的一项新功能,以支持从其他步骤构建的任意步骤,如果涉及到,您还可以对场景的帖子和前提条件进行分组。
    猜你喜欢
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2018-12-13
    • 2019-10-13
    • 1970-01-01
    相关资源
    最近更新 更多