SpecFlow - 挂钩


挂钩是事件绑定,用于在某些步骤添加更多自动化逻辑。例如,对于需要在特定场景之前运行的任何步骤。介绍一下,我们必须在代码中添加[Binding]属性。

Hooks 具有全局访问权限。但可以通过声明作用域绑定将其提供给功能和场景。可以使用标签过滤作用域绑定。

SpecFlow+ 运行器限制

如果我们使用 SpecFlow+ Runner 从多个线程执行测试,则 After 和 Before 挂钩(例如 BeforeTestRunAfterTestRun 只会为每个线程运行一次。

挂钩属性

下面列出了 Hook 属性 -

BeforeTestRun/AfterTestRun - 用于在完整测试执行之前/之后运行自动化逻辑。它适用的方法应该是静态的。

BeforeFeature/AfterFeature - 用于在单个功能执行之前/之后运行自动化逻辑。它适用的方法应该是静态的。

BeforeScenario 或 Before/AfterScenario 或 After - 用于在单个场景或场景大纲执行之前/之后运行自动化逻辑。

BeforeScenarioBlock/AfterScenarioBlock - 用于在单个场景块执行之前/之后运行自动化逻辑。(在 When 和 Give 步骤之间)。

BeforeStep/AfterStep - 用于在单个场景步骤执行之前/之后运行自动化逻辑。

钩子执行顺序

类似类型的挂钩(例如两个 AfterScenario 挂钩)以随机顺序运行。为了按照特定的顺序执行,我们必须在钩子属性中添加Order属性。

例子

[AfterScenario(Order = 1)]
public void CloseBrowser() {
   // we require this method to execute first...
}
[AfterScenario(Order = 2)]
public void VerifySessionIdAfterBrowserClose() {
   // ...so we require this method to execute after the CloseBrowser //method is run
}

数字表示顺序,这意味着编号最小的钩子首先运行。如果省略该数字,则默认值为 10000。依赖它并提及各个挂钩的顺序并不是一个好的做法。

此外,如果引发未处理的异常,则将跳过以下所有类似类型的钩子。为了防止这种情况,我们应该处理所有异常。