9

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

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

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

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

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

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

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

4

1 回答 1

13

specflow 中没有“Postground”功能,但是您可以通过标签过滤实现类似的功能。

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

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

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

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

@authentication
Feature: Some feature requires authentication

@authentication
Scenario: Some scenario requires authentication

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

于 2012-06-11T11:28:47.080 回答