我是SpecFlow的新手,我正在为不同角色类型的经过身份验证的用户设置一些测试功能/方案。我是通过Coypu的浏览器自动化做到的。
所以我在该功能中有一个后台步骤来设置该角色类型的用户的登录。
Background:
Given I am logged in as a ...some role I'm interested in...
在功能中的每个场景之后,我想再次将用户注销(否则后台的登录步骤将不适用于下一个场景 - 我在测试之间保持相同的Coypu浏览器实例打开)。
我找到了我可以使用的[AfterScenario]
注释,但是因为它涵盖了所有功能的所有场景(据我所知......),这会影响对未经身份验证的用户的情况。
我可以将[AfterScenario]
的范围与[Scope(Feature="Some Feature")]
相提并论,但我预计必须在我正在测试的一系列功能之前和之后登录/注销,而我是并不热衷于用一堆魔术字符串来指定所有这些。
所以我想知道我是否可以在Feature文件中添加一些内容,类似于Background,但在该功能中的每个场景之后运行。 (或者,也许我为每个场景登录/退出的方式不是最好的方法吗?)
答案 0 :(得分:12)
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
因此,在您的代码中,您将只有一个魔术字符串“authentication”,并且在您的功能中,您可以使用标记以声明方式应用自定义逻辑。