因此,我将 SpecFlow 与 NUnit 结合使用,通过 Selenium 开发 Web 应用程序的端到端验收测试。为了判断失败的性质,我们所做的事情之一就是每当回归测试失败时就截取浏览器的屏幕截图。我目前正在通过将每个测试包装在 try/catch 块中来完成此操作,然后使用 Selenium 在 catch 中截取屏幕截图,重新抛出异常。这是可行的,但它使测试变得更加混乱和乏味。
NUnit 或 SpecFlow 中是否有一种方法可以在任何测试失败时、调用任何拆卸方法之前调用挂钩?
您可以使用 ScenarioContext 来检测场景是否生成错误。
ScenarioContext.Current.TestError
如果不为空,则发生错误。您可以检查此项并用它来确定是否进行屏幕截图。您可以在SpecFlow 的文档参考 上查看示例。
您还可以将其设为 AfterScenario Hook,这样您就不需要到处都有 try/catch。它只会在最后检查每个测试,看看是否发生错误以及是否创建屏幕截图。
如果你想在Nunit(3.0+)失败时截图,你可以使用下面的
[TearDown]
public void AfterScenario()
{
if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed)
{
// code to take screenshot based on framework you are using)
}
}
请记下specflow有[AfterScenario],Nunit有[Teardown],你应该把这段代码放在哪里
对于最新的specflow版本(3.9),您必须在案例类中使用依赖注入,如下所示才能获取scenariocontext
private readonly ScenarioContext scenarioContext;
// constructor
public YourClassName(ScenarioContext scenarioContext)
{
scenarioContext = scenarioContext;
}
[AfterScenario]
public void TearDown()
{
if (scenarioContext.ScenarioExecutionStatus.ToString().Equals("TestError"))
{
// screenshot code
}
}