SpecFlow - Hooks
Hooks 是事件绑定,用于在某些步骤添加更多自动化逻辑。例如,对于需要在特定场景之前运行的任何步骤。要在代码中引入钩子,我们必须添加 [Binding] 属性。
Hooks 具有全局访问权限。但可以通过声明范围绑定将其提供给功能和场景。可以使用标签过滤范围绑定。
SpecFlow+ Runner 限制
如果我们使用 SpecFlow+ Runner 从多个线程执行测试,则 After 和 Before 钩子(如 BeforeTestRun 和 AfterTestRun)在每个线程中仅运行一次。
钩子属性
钩子属性列在下面 −
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。依赖它而不是提及单个钩子的顺序并不是一个好习惯。
此外,如果抛出未处理的异常,则将跳过所有类似类型的后续钩子。为了防止这种情况,我们应该处理所有异常。