【问题标题】:How can I use the name of a step in my error logs? NUnit, Specflow, C#如何在错误日志中使用步骤的名称? NUnit、Specflow、C#
【发布时间】:2020-01-21 12:42:18
【问题描述】:

我将测试作为端到端场景自动化,因此我有多个 Then,例如

Scenario: My scenario
Given a
When b
Then check something 1
When c
Then check something 2
When d
And e
Then check something 3

我知道您可以访问测试名称 TestContext.CurrentContext.Test.Name,您可以将其插入错误日志,但我似乎找不到获取步骤名称的方法。

当场景失败时,我想知道它在哪个 Then 语句上失败,例如...

string errorLog += "Scenario \"" + TestContext.CurrentContext.Test.Name + "\" failed on test step: \"" + testStepName + "\"."

...应该产生这样的结果:

Scenario "My scenario" failed on test step: "Then check something 2".

这可能吗?

谢谢

【问题讨论】:

  • 我认为运行测试时的标准输出(基本上对Console.WriteLine(...)的调用包含在测试结果中。它应该逐行显示哪些步骤成功,哪些步骤失败。
  • 我很确定您可以在 Visual Studio 测试资源管理器中查看测试结果。查看测试的详细信息应显示场景中的每个步骤,以及该步骤是通过还是失败。
  • @GregBurghardt 我应该提到我正在将详细信息保存到我 PC 上的文本文件错误日志中。
  • 从命令行运行测试时(如果您正在这样做),您可以将输出设置为写入文件。我真的认为您可以利用您的工具来执行此操作,而不是编写代码来执行此操作。
  • 我正在做的事情似乎没有必要。那是因为我根本没有说得很清楚!当文件夹中存在 AssertionException 时,我会保存屏幕截图,因此认为将异常消息也记录在同一文件夹中的文本文件中会很方便。随着我的测试套件越来越大,我宁愿不费力地通过大量测试来查找错误,然后转到文件夹并查找与哪个错误相关的屏幕截图。两个文件的名称相同,我所要做的就是开始运行并监视文件夹 - 我只看到我关心的内容,很容易通过文件名将错误与屏幕截图相关联。

标签: c# testing nunit specflow scenarios


【解决方案1】:

查看ScenarioStepContext classStepInfo.Text 属性。有一个pull request 添加功能以公开当前步骤类型和文本

【讨论】:

  • Pavel Anikhouski 的回答让我找到了stackoverflow.com/questions/50838738/…,这让我找到了解决方案: [AfterStep] public void GetStepName(ScenarioContext scenarioContext) { stepName = scenarioContext.StepContext.StepInfo.StepDefinitionType + " " + scenarioContext. StepContext.StepInfo.Text; }
  • 我不能编辑上面的评论,但你应该使用 BeforeStep 代替,因为如果一个步骤导致 AssertionException,测试会在获得该步骤的名称之前爆炸(它将保留前一个) .
猜你喜欢
  • 1970-01-01
  • 2011-12-22
  • 2014-09-26
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
  • 2018-06-20
  • 1970-01-01
相关资源
最近更新 更多