如何在SpecFlow C#中使用MSTest注解?
我们可以在SpecFlow C#的钩子函数中使用MSTest注解。钩子函数是事件绑定,用于在特定步骤添加更多自动化逻辑。例如,对于任何需要在特定场景之前运行的步骤。要在代码中引入钩子函数,我们必须添加[Binding]属性。
钩子函数具有全局访问权限。但是可以通过声明作用域绑定使其对特性和场景可用。作用域绑定可以使用标签进行过滤。
SpecFlow+ Runner限制
如果我们使用SpecFlow+ Runner从多个线程执行测试,则BeforeTestRun和AfterTestRun之类的After和Before钩子函数每个线程只运行一次。
钩子属性
钩子属性如下所示:
BeforeTestRun/AfterTestRun - 用于在完整测试执行之前/之后运行自动化逻辑。
BeforeFeature/AfterFeature - 用于在单个特性执行之前/之后运行自动化逻辑。
BeforeScenario 或 Before/AfterScenario 或 After - 用于在单个场景或场景大纲执行之前/之后运行自动化逻辑。
BeforeScenarioBlock/AfterScenarioBlock - 用于在单个场景块执行之前/之后运行自动化逻辑。(在When和Given步骤之间)
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。依赖它不是一个好习惯,最好为各个钩子函数指定顺序。
此外,如果抛出未处理的异常,则所有后续的相同类型钩子函数都将被跳过。为防止这种情况,我们应该处理所有异常。