SpecFlow - Hooks

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

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

SpecFlow+ Runner 限制

如果我们使用 SpecFlow+ Runner 从多个线程执行测试,则 After 和 Before 钩子(如 BeforeTestRunAfterTestRun)在每个线程中仅运行一次。

钩子属性

钩子属性列在下面 −

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

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

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

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

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

Hooks 执行顺序

类似类型的钩子,例如两个 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。依赖它而不是提及单个钩子的顺序并不是一个好习惯。

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